1、因为本人使用heapalloc分配内存的对象是结构体
//HTTP消息数据结构体
typedef struct _HttpMsgData
{
string httpMethod;//请求方法(GET/POST)
string url;//url
string 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操作符会执行析构函数