2009-10-17 60 views
0

我在一個DLL中使用了許多其他DLL和EXE中的類。它包含在其他二進制文件中的include文件中定義的幾個方法(即方法體在.h文件中)。其中之一是給我適合:int GetVersion() { return nVersion; }在VC++頭文件中定義的方法的問題

它總是返回-842150451,但是當我在調試器中運行並查看類成員變量時,nVersion100

有關如何調試此問題的任何想法?我很困難。

(注:這一直工作正常了十年但現在我們從VC6.0移動我們的代碼VS2005,也並非一帆風順......)

+0

「nVersion」在哪裏定義? – strager

+0

它是在.h中聲明的類的成員變量。它的值是用先前調用的方法設置的。 – user191582

回答

3

,在十六進制值的樣子0xCDCDCDCD這通常是在調試版本中未初始化的內存。你確定nVersion已經初始化了嗎?

+0

是的,這是奇怪的事情!如果我查看我的類實例的內容,那麼成員變量nVersion就在那裏,並且設置爲100,就像我期望的那樣。 – user191582

+0

在您正在檢查的實例中(在調試器中,值顯示爲100),是單例,全局還是本地實例? –

+0

本地實例,我想你會說。我通過調用「new」來創建類的一個實例。在調試器中,我收到了調用,nVers = clas-> GetVersion();當我將鼠標懸停在'clas'上時,我可以看到它的成員變量,包括nVersion,它是100. – user191582

1

我有一個類似的問題與靜態變量未定義的初始化順序有關。

0

所以,如果我跟着你,你已經有了下面的事情相當於:

clas=new MyClass(); 
// some other code executes 

clas->SetVersion(100); 
/// some other code executes... 
/// one line before, nVersion is fine. 
int n=clas->GetVersion(); ///< this is where it all goes wrong 

(我會發布的評論但它不格式化代碼)

我假設你確定clas的指針沒有被破壞,但指向可讀/可執行的內存。 (這將軟管的東西很多)

至於工具來幫助你調試,嘗試使用內存分析工具,如Compuware DevPartner內存分析器。其他人可以看看包括Purify,Insure ++(我也使用過它,功能更強大,但更難使用)

這些工具傾向於快速提醒您易於製作,但很難找到內存錯誤。