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有问题我觉得没什么问题啊,实在没办法,想问问各位前辈,什么状况有可能出这种问题?
{
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有问题我觉得没什么问题啊,实在没办法,想问问各位前辈,什么状况有可能出这种问题?
{
_Processor = new CProcessor; //调试能进入这句吗?
ASSERT(_Processor!=NULL); //这一句时 _Processor 为 NULL 吗?
}
return _Processor;
#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的输出窗口有什么异常