class CProcessor  :public CObject
{
 DECLARE_SERIAL(CProcessor)CProcessor类继承CObject,并且具有串行化在其它类中,(初始化它的指针为NULL)我想这样使用CProcessor* p = (_Processor!=NULL)?_Processor:(_Processor = new CProcessor);
return p;编译通过,调试报错,
改成 if (_Processor==NULL)
{
_Processor = new CProcessor;
ASSERT(_Processor!=NULL);
}
return _Processor;结果调试:反汇编
358:      if (_Processor==NULL)
00403972   mov         eax,dword ptr [ebp-10h]
->00403975   cmp         dword ptr [eax+5Ch],0
00403979   jne         CdefStressDoc::Processor+0B5h (004039f5)
359:      {
360:          _Processor = new CProcessor;虽然我看不懂,但是估计是Processor==NULL有问题我觉得没什么问题啊,实在没办法,想问问各位前辈,什么状况有可能出这种问题?

解决方案 »

  1.   

    if (_Processor==NULL)
    {
    _Processor = new CProcessor;    //调试能进入这句吗?
    ASSERT(_Processor!=NULL);    //这一句时 _Processor 为 NULL 吗?
    }
    return _Processor;
      

  2.   

    ->00403975   cmp         dword ptr [eax+5Ch],0反汇编停在这处,应该还没进入 _Processor = new CProcessor;
      

  3.   

    考虑是否其它的地方将内存写坏。看一下CProcessor的构造函数,如果找不出来问题的话就这样:在stdafx.h的最下面加入下面的代码:#define _CRTDBG_MAP_ALLOC
    #include <stdlib.h>
    #include <crtdbg.h>在初始初始化的时候执行下面的代码:
    int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
    tmpFlag |= _CRTDBG_ALLOC_MEM_DF;
    tmpFlag |= _CRTDBG_DELAY_FREE_MEM_DF;
    tmpFlag |= _CRTDBG_CHECK_ALWAYS_DF;
    tmpFlag |= _CRTDBG_CHECK_CRT_DF;
    tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
    _CrtSetDbgFlag( tmpFlag );在出错的那一句上面加入下面的代码:
    _CrtCheckMemory( void );然后注意看VC的输出窗口有什么异常