C++中關於assign 0 to _debugger_hook_dummy so that the function is not folded in retail的錯誤

assign 0 to _debugger_hook_dummy so that the function is not folded in retail

今天在運行程序時出現這個錯誤,我找了好久才發現這個問題所在,我把自己的一個關於字符串轉換的函數註銷後運行就正常了
 
在編譯MFC時有時候出現下面的錯誤。

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"userDefined"; 或者 str.Format(L"%s",L"userDefined");

str.Format(L"%s%s",str,L"bbbbbbb");

這樣子就會導致上面的錯誤信息。這是因爲用FORMAT會在內部根據格式化參數列表對字符串本身的內在空間進行重新分配
而如果直接採用字符串本身作爲參數傳入的話,會造成內在的衝突,而這個衝突是無法遇見的,即不會經常出現。

所以,爲了避免上面的問題,應避免使用上述的方法。

CString temp= L"userDefined"; 或者 str.Format(L"%s",L"userDefined");

str.Format(L"%s%s",temp,L"bbbbbbb");

只需多采用一個變量即可。

* 注意:避免將字符串本身作爲參數傳入到使用FORMAT格式化列表的原來字符串中。

1.在很短的時間內創建多線程...

for (int i =0; i < 100; i++)

HANDLE handle = CreateThread(.....);

在1秒內一下子創建幾十個線程有可能出現這種狀況。

2. 在很短時間內訪問同一個文件的操作,同時沒有加鎖

和1差不多吧,

3.多線程在很短的時間間隔內共同操作用戶界面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章