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變量/訪問器
您能否顯示'MEngine'和'getPackageManager()'的定義? – chrisaycock
你確定'MEngine :: getInstance'返回一個有效的指針而不是垃圾嗎? – pmr
在沒有優化的情況下編譯時甚至會出現這種情況?如果編譯器已經注意到你忽略了'getPackageManager'的返回值,它可能不會返回一個值。 – James