win32api函数中heapalloc和heapfree使用导致内存没正常释放

来源:互联网 发布:什么软件拍照好看 编辑:程序博客网 时间:2024/05/21 11:22

1、因为本人使用heapalloc分配内存的对象是结构体

//HTTP消息数据结构体typedef struct _HttpMsgData{string httpMethod;//请求方法(GET/POST)string url;//urlstring postContent;//消息体string contentLength;//post时,消息体长度}HttpMsgData,*LPHttpMsgData;

HeapAlloc分配内存

/分配堆内存LPHttpMsgData pData=(LPHttpMsgData)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(HttpMsgData));

HeapFree释放内存

//释放传参所分配的堆内存HeapFree(GetProcessHeap(),0,pHttpMsgData);


通过该操作后,程序的依然存在内存泄漏的问题,运行时间越长,内存占用越高。

2、改成new、delete内存操作符之后,问题解决

通过咨询网友得知:

win32的heapfree函数,调用时,若待释放的对象有构造、析构函数(如class、c++ struct),heapfree不会调用对象的析构函数。

因为我的结构体里面的成员变量是string类型,string有构造函数、析构函数。也就是说通过heapfree释放结构体时,并不会执行string的析构函数

而delete操作符会执行析构函数


0 0