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

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操作符会执行析构函数


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值