日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

可能是堆被损坏,这也说明 XX.exe 中或它所加载的任何 DLL 中有 bug

發布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可能是堆被损坏,这也说明 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。