C ++顺序设置和获取;得到返回0x0

时间:2012-09-19 13:59:27

标签: c++ debugging

MacOS X Lion,Xcode 4 我的应用程序是一个命令行工具。 我的应用程序中有以下代码

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的值。在这两种情况下,引擎对象都是相同的。 这对我来说似乎很奇怪。 App使用一个线程。 App使用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 个答案:

答案 0 :(得分:0)

我将构建配置从Debug切换到Release,项目运行没有这样的错误。 我认为调试设置有一些东西。