请教这样释放资源会不会有问题?

xueyu32 2009-09-22 01:26:54
是这样,有一个结构体,我如果只知道其中一部份的地址,然后依靠地址偏移来计算实际位置,然后释放资源,会不会出现问题,如下的Demo可行吗?谢谢!!

VS2008编译通过


#include "stdafx.h"
#include <Windows.h>
#include <iostream>

using namespace std;


void Wait()
{
char w;
cin>>w;
}

struct Data
{
char name[20];
int length;
};

struct DataItem
{
Data data;
DataItem *pNext;
};

int _tmain(int argc, _TCHAR* argv[])
{

DataItem* item = static_cast<DataItem*>(::HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(DataItem)));

sprintf(item->data.name,"ipod");
item->data.length = 12;
item->pNext = 0;

cout<<item->data.name<<endl;
cout<<item->data.length<<endl;

cout<<item<<endl;
cout<<&(item->data)<<endl;


bool success = ::HeapFree(::GetProcessHeap(),0,&(item->data));

///如果换成这样呢
//DataItem *p = CONTAINING_RECORD(&(item->data),DataItem,data);
//cout<<p<<endl;
//bool success = ::HeapFree(::GetProcessHeap(),0,p);

cout<<success<<endl;

Wait();
return 0;
}


输出的几个内存地址都是一样的
...全文
78 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
whg01 2009-09-22
  • 打赏
  • 举报
回复
2种都可以,不过还是建议你改成::HeapFree(::GetProcessHeap(),0,item);
否则一旦data不是item的第一个元素,你的程序就会出问题。
MSDN上写了:对于HeapFree 的第三个参数,Pointer to the memory block to be freed. This pointer is returned by the HeapAlloc or HeapReAlloc function.
凤朝凰 2009-09-22
  • 打赏
  • 举报
回复
应该没问题吧
xueyu32 2009-09-22
  • 打赏
  • 举报
回复
多谢。。

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧