0xC0000374: 堆已损坏。 (参数: 0x777DB960)

VS2015 编译C++,Debug版运行没问题,Release时发现出现以下错误.

代码是从VS2012升级来的,在VS2012下编译Release版没有问题。

检查代码,问题出现在字符串复制的时候。

pChars = StrDup(str);

怀疑VS2015的StrDup函数出问题了。查看了汇编代码,也是一头雾水,看不出什么问题来。

没办法,又回到VS2015Debug,写了个测试程序,多跑了几遍,果然在Debug版下也出现相同问题了。

跟进去发现是

LocalFree((HLOCAL)pChars);

看pChars的值,0xdddddddd,Debug下标志性的野指针!才想起,在类构造函数中直接先释放pChars指针,然后给赋值,在此之前没有初始化pChars。

记得Debug版下,如果使用没有初始化的指针的话,运行时会有相关提示,不知这个为什么不做提示,是在类构造函数中的原因?

在Debug版下,0xdddddddd地址应该是个无意义的地址,即使释放,也不会产生严重问题。但在Release版下,pChar的为初始化的值为随机数,可能是有意义的内存地址,如果贸然释放,必然会造成程序崩溃。另外,好像VS2015对内存的越界检查更严格了。

只是为什么在VS2012下编译的Release版,居然没有发现此问题?

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值