以下內容轉載http://blog.csdn.net/yuzhiyi926/article/details/7239675
現象:
Microsoft Visual Studio C 運行時庫在 arctic.exe 中檢測到一個錯誤。
按“中斷”以調試程序,或按“繼續”以終止程序。
當點擊中斷調試的時候,程序會執行到綠色這一行:
void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)
{
/* assign 0 to _debugger_hook_dummy so that the function is not folded in retail */
(_Reserved);
_debugger_hook_dummy = 0;
}
原因:
其實這個錯誤的原因主要是因爲內存空間的重複分配時發生錯誤(或內存訪問異常)。
如下面:
CString str = L"aaaaaaaaa"; 或者 str.Format(L"%s",L"aaaaaaaaaa");
str.Format(L"%s%s",str,L"bbbbbbb");
這樣子就會導致上面的錯誤信息。這是因爲用FORMAT會在內部根據格式化參數列表對字符串本身的內在空間進行重新分配
而如果直接採用字符串本身作爲參數傳入的話,會造成內在的衝突,而這個衝突是無法遇見的,即不會經常出現。所以,爲了避免上面的問題,應避免使用上述的方法。
CString temp= L"aaaaaaaaa"; 或者 temp.Format(L"%s",L"aaaaaaaaaa");
str.Format(L"%s%s",temp,L"bbbbbbb");
只需多采用一個變量即可。
* 注意:避免將字符串本身作爲參數傳入到使用FORMAT格式化列表的原來字符串中。
另外,還有一些情況是從網上找的,不知道是否真的是這樣,沒有進行驗證,僅供參考。
1.在很短的時間內創建多線程...
for (int i =0; i < 100; i++)
HANDLE handle = CreateThread(.....);
在1秒內一下子創建幾十個線程有可能出現這種狀況。
2. 在很短時間內訪問同一個文件的操作,同時沒有加鎖
和1差不多吧,
3.多線程在很短的時間間隔內共同操作用戶界面