我已經被賦予一個任務來調試C++項目。我沒有在這個項目中編寫一行代碼!0xC0000005 - 訪問衝突(每次從一個不同的dll)
該項目執行約5分鐘沒有問題。
現在,每當我執行程序的時間,然後將其與異常 「: 0000005訪問衝突讀取位置未處理的異常的(某些.DLL名稱)EITos.exe」結束。錯誤來自不同的dll。有時它是由其他程序員創建的DLL,有時與QT有關。所以我不認爲這是一個代碼問題。是否有任何項目設置會影響這個?
我在問一些關於如何調試這個問題的一般技巧和提示。
我已經被賦予一個任務來調試C++項目。我沒有在這個項目中編寫一行代碼!0xC0000005 - 訪問衝突(每次從一個不同的dll)
該項目執行約5分鐘沒有問題。
現在,每當我執行程序的時間,然後將其與異常 「: 0000005訪問衝突讀取位置未處理的異常的(某些.DLL名稱)EITos.exe」結束。錯誤來自不同的dll。有時它是由其他程序員創建的DLL,有時與QT有關。所以我不認爲這是一個代碼問題。是否有任何項目設置會影響這個?
我在問一些關於如何調試這個問題的一般技巧和提示。
使用DLL時常見的問題是在DLL中分配內存並將其重新分配給其他位置(在另一個DLL或主可執行文件中)。我認爲你的問題可能來自這樣的事情。
一個快速解決方案是對所使用的所有項目使用/MD
編譯器標誌。此選項指定運行時庫應該動態鏈接到您的可執行文件,以便在dll之間使用相同的分配器/解除分配器。你可以閱讀更多關於它here。
此外,照顧一下:
不要混用運行時庫的靜態和動態版本。在進程中運行時庫有多個副本可能會導致問題,因爲一個副本中的靜態數據不會與另一個副本共享。鏈接程序可以防止您在一個.exe文件中同時鏈接靜態和動態版本,但仍可以最終生成兩個(或更多)運行時庫副本。例如,與運行時庫的動態(DLL)版本鏈接的.exe文件一起使用時,與運行時庫的靜態(非DLL)版本鏈接的動態鏈接庫會導致問題。 (你也應該避免在一個進程中混合庫的調試版和非調試版)。
另一種方法是不在一個dll中分配內存並在另一個dll中取消分配。所以你可以檢查代碼,最終重寫它。但是這更耗時。
謝謝你的回覆。但它似乎沒有幫助。我現在正在檢查這個龐大的代碼。 – Shreyes