_CrtIsValidHeapPointer问题

本文探讨了DLL与EXE之间内存管理不一致导致的问题,包括局部vector释放时的断言错误及MFC环境下对象分配与释放不当引发的异常,并提出了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天遇到了这个assert,发现是dll中的一个局部vector释放的时候报的,这个vector是在dll中定义的,然后实在exe中分配的空间(通过引用传参数,然后调用push_back方法),这样,vector释放的时候它会发现dll正在释放一个不是由dll分配的内存,所以就会出此断言,一个临时的解决方案是,在dll中分配,可以通过vector的reserve方法来实现,当然,更好的解决方法是上层避免这种用法

 

还有在使用mfc时也遇到过这个问题,

mfc主程序中引用了一个dll,在dll中动态分配了一个对象,然后在主程序中释放,就会出现问题,是由于程序是静态依赖mfc运行时库的,这样在释放的时候,只查找主程序所在的堆空间,应用程序就认为释放了一个不再堆列表中的地址,而改为动态依赖mfc,程序才会查找依赖的dll中的堆列表,所以就没有问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值