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版,居然没有发现此问题?