2012-09-19 45 views
0

MacOS X Lion,Xcode 4 我的應用程序是一個命令行工具。 我有下面的代碼在我的應用程序C++順序設置並獲取;獲得返回0x0

int main(int argc, const char * argv[]) 
{ 
    MSystemContext * m_system = new MCommandLineContext(); 
    MPackageManagerNPK *packageManager = new MPackageManagerNPK(); 

    MEngine * engine = MEngine::getInstance(); 
    engine->setSystemContext(m_system); // system context 
     // Strange behavior here: 
    engine->setPackageManager(packageManager); 
    MPackageManager *ppPackageManager = engine -> getPackageManager(); 
    engine->setPackageManager(packageManager); // 
    engine->setPackageManager(packageManager); // 
    return 0; 
} 

我在調試器,m_system和packageManager創建非NULL檢查。 我檢查引擎是不是NULL。

engine->setSystemContext(m_system); 

工作正常。 我在調試器窗口中看到引擎的相應實例變量被設置爲m_system。 我進入引擎 - > setPackageManager(packageManager);並看到它按預期工作。它看起來像

void MEngine::setPackageManager(MPackageManager * packageManager) 
{ 
    m_packageManager = packageManager; 
} 

雖然我在setPackageManager方法,我看到m_packageManager變量設置爲packageManager的值。 但是當調試器從setPackageManager方法返回到main()時,引擎對象的m_packageManager的值變爲0x0。 當我進入getPackageManager()時,我看到m_packageManager是0x0。 但之後,當我步入setPackageManager時,我看到m_packageManager設置爲值packageManager。在這兩種情況下,引擎對象都是一樣的。 這對我來說似乎很奇怪。 應用程序使用一個線程。 應用程序使用dylib,其中包含MEngine類。 什麼會導致此類行爲? 我該如何調試?

編輯: MEngine類(部分地):

// .h  
class M_ENGINE_EXPORT MEngine 
{ 
private: 
... 
MPackageManager * m_packageManager; 
public: 
MEngine(void); 
... 
inline MPackageManager * getPackageManager(void){ return m_packageManager; } 

// .cpp 

MEngine::MEngine(void): 
m_packageManager(NULL) 
{ 

} 

MEngine * MEngine::getInstance(void) 
{ 
    static MEngine m_instance; 
    return &m_instance; 
} 

系統上下文變量及其訪問器定義相同packageManager變量/訪問器

+1

您能否顯示'MEngine'和'getPackageManager()'的定義? – chrisaycock

+3

你確定'MEngine :: getInstance'返回一個有效的指針而不是垃圾嗎? – pmr

+1

在沒有優化的情況下編譯時甚至會出現這種情況?如果編譯器已經注意到你忽略了'getPackageManager'的返回值,它可能不會返回一個值。 – James

回答

0

我切換從調試構建配置爲Release,和項目運行沒有這樣的錯誤。 我覺得有一些調試設置。