可能是堆被损坏,这也说明 XX.exe 中或它所加载的任何 DLL 中有 bug
生活随笔
收集整理的这篇文章主要介绍了
可能是堆被损坏,这也说明 XX.exe 中或它所加载的任何 DLL 中有 bug
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
今天遇到一个很奇怪的问题,
当代码如下时:
char* s = (char*)malloc(20*sizeof(char)); string buffer; const char* conchar; char* p; double x = 0.01; while(getline(file,buffer)){const int len = buffer.length();conchar = buffer.c_str();//m_conchar为const char *strcpy(s,conchar);//换成char*cout<<x<<endl; }上述不是我完整的程序,cout是实例,就是每次运行到cout只要输出是小数都会出错,而int类型啥的都不出错。
当工程设置运行库“多线程DLL(MD)”
XXX.exe 中的 0x7707e4e4 (ntdll.dll) 处有未经处理的异常: 0xC0000005: 写入位置 0x0000000000000024 时发生访问冲突
当工程设置运行库“多线程调试DLL(MDd)”
只要是cout或者file.close()或者free(s)都会出现
其原因可能是堆被损坏,这也说明 XX.exe 中或它所加载的任何 DLL 中有 bug
http://blog.csdn.net/blz_wowar/article/details/2176536
但是感觉这些都不适用,没有自己加载的dll。
之后一点一点注释,发现没有strcpy这个函数就不会崩溃,而加上之后在cout处还是会崩溃,每次出错都在C的运行时库,后来把代码改成了
//char* s= (char*)malloc(20*sizeof(char)); string buffer; //const char* conchar; char* p; double x = 0.01; while(getline(file,buffer)){const int len = buffer.length();char* s = new char[len];strcpy(s,buffer.c_str());//conchar = buffer.c_str();//m_conchar为const char *//strcpy(s,conchar);//换成char*cout<<x<<endl;//delete s; }这样可以顺利运行,但是delete的时候程序会有问题,这样就造成了内存泄露,很奇怪。
最后搞清楚了这种情况是越界了,所以free会出错,delete也会出错,http://blog.csdn.net/kuaile123/article/details/10215483
总结
以上是生活随笔为你收集整理的可能是堆被损坏,这也说明 XX.exe 中或它所加载的任何 DLL 中有 bug的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: vs2010连接mongodb服务器,X
- 下一篇: 计算灰度共生矩阵相关性时sigmax,y