我的應用程序使某些工作的工人代理下面檢測不正確的堆棧變量使用
void Execute ProcessWork
{
int nRes = 0;
CFireProcessMessageWork *pProcessMessageWork = new CFireProcessMessageWork();
// Incorrect use of stack variable
pProcessMessageWork->m_pStatus = &nRes;
// Worker Agency
m_pMessageWorkerAgency->SubmitWork(pProcessMessageWork);
}
給出CFireProcessMessageWork的定義如下線程池中的線程來執行。下面給出的類的DoWork方法將在工作線程中執行。由於變量nRes以不正確的方式使用,我的應用程序偶爾崩潰。我花了差不多一個星期的時間來找出問題的原因。我嘗試使用完整選項和堆棧幀(/ RTC)來檢測問題。但是應用程序在與該問題無關的位置崩潰。
有沒有microsoft提供的任何工具來檢測這些類型的問題?
class CFireProcessMessageWork
{
public:
int *m_pStatus;
public:
CFireProcessMessageWork()
{
m_pStatus = NULL;
}
int DoWork()
{
// Using Address of nRes
*mpStatus = 0;
// Do Some Work and Pass mpStatus to fill the error code
HRESULT hRes = pGEMMessageEvents->ProcessMessage(varData, m_nMsgCount, m_newTkt,m_idxFunc,&m_nRetVal);
return *mpStatus
}
}
我不知道一個工具,但你肯定有一個*進程*到位 - 它被稱爲*代碼審查*! – Nim 2011-05-09 07:51:02
爲什麼要在第一個地方存儲地址? – 2011-05-09 07:58:55