爲了進行調查,我需要知道硬編碼值的存儲位置。硬編碼值存儲在哪裏?
問題:一個函數裏面有硬編碼的值,這個函數被許多線程同時調用,這個硬編碼值是否有可能被破壞。
例如:myFunc被多個線程同時調用。 可以字面「未處理的異常:」被破壞
void myFunc()
{
EXCEPTION_RECORD ExceptRec
bool retValue=doSomething(ExceptRec);
if(!retValue)
{
log ("Unhandled exception:"<< " code = " << hex << ExceptRec.ExceptionCode
<< " flags = " << ExceptRec.ExceptionFlags
<< " address = " << ExceptRec.ExceptionAddress)
// log is macro which will insert content into ostrstream
}
}
功能DoSomething的樣子:
bool doSomething(EXCEPTION_RECORD &ExceptRec)
{
__try
{
// some code here
}
__except (ExceptRec = *(GetExceptionInformation())->ExceptionRecord,
EXCEPTION_EXECUTE_HANDLER)
{
return false;
}
return true;
}
謝謝安德魯,「如果你不鎖定/同步」我的日誌記錄的東西是線程安全的,但任何如何字符串文字被損壞導致崩潰:( – Satbir 2009-10-06 05:29:34
@Soni:真的,我懷疑,否則你會不會得到錯誤,但是如果沒有log(x)的定義很難說, – 2009-10-06 08:06:36