所以這是非常奇怪的,可能有一個非常簡單的解釋,但我使用的是一臺機器,我通常沒有使用工廠默認安裝的VS下面的代碼正是我正在運行的,並且它導致這個熟悉的消息:系統(「暫停」)導致堆損壞
Windows已觸發ProjectB.exe中的斷點。
這可能是由於堆損壞引起的,這表明ProjectB.exe或其中已加載的任何DLL的錯誤。
這也可能是由於用戶在ProjectB.exe具有焦點時按下F12。
輸出窗口可能有更多診斷信息。
的代碼是:
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char** argv)
{
system("pause");
return 0;
}
這就是它!沒有更多,只有一個文件。註釋掉系統(「暫停」)不會觸發中斷,但我無法阻止程序退出(如您所期望的)。所以我很困惑。這對我來說似乎很奇怪,因爲我以前從未遇到過這種情況,我不明白爲什麼會導致問題。使用另一個不停止進程的系統命令(如system(「cls」))也不會導致問題。我的傾向是,這是特定於我正在工作的機器,但我不確定。提前致謝!
任何幫助表示讚賞。
[編輯]
所以我從來沒有調試到標準頭文件(至少不是故意)之前,但我注意到一兩件事:
在__crtCorExitProcess
調用加載mscoree.dll中模塊返回一個空的句柄,意味着它沒有加載。我不確定這是否是正常情況,但是這樣做會跳過一段獲取exit proc函數指針的代碼。在調用此方法之後,調用ExitProcess
被調用,並且從這裏觸發中斷。
[EDIT 2]
在輸出窗口中產生呼叫的
system("pause")
後的以下內容:在ProjectB.exe在0x750cc41f 第一次機會異常:微軟C++異常:> log4cxx ::助手: :IOException在內存位置0x006ff1fc .. ProjectB.exe中0x750cc41f的第一次機會異常:Microsoft C++異常:> log4cxx :: helpers :: IOException在內存位置0x006ff344 .. SPLogger:setFile(C:\ ProgramData \ Safend \ Logs.18698 \ SPHook.log,true)調用失敗。 SPLogger:IO異常:狀態碼= 720005 SPLogger:沒有爲名爲[SPHookLog]的appender設置輸出流或文件。
然後當ExitProcess的被調用時,這個被添加到輸出窗口:
線程 '的Win32線程'(0x1ca8)已經退出,代碼0(爲0x0)。 HEAP [ProjectB。exe]:HEAP:免費堆21a4ba8在21a4c10修改後釋放
這對我很好奇。
請注意,''不能保證包含C頭文件,所以''實際上是必需的。但這不應該是錯誤的根源。 –
謝謝;我添加了 include,這也沒有解決問題。 –
這聽起來像一個運行時庫不匹配給我。 –