同叙快崩溃了,帮他问问

zzunicholas 2006-06-06 06:39:08
class CDibPro : public CDibEx
{
public:
DECLARE_SERIAL(CDibPro)

CDibPro继承自CObject,具有串行化功能

class CProcessor :public CObject
{
public:
DECLARE_SERIAL(CProcessor)

private:
CDibPro * m_pDib;//CProcessor初始化时为NULL

但是!!!
CDibPro* CProcessor::Dib()
{
CDibPro* p = new CDibPro;

m_pDib = p;//在这停住了
}
或者
CDibPro* CProcessor::Dib()
{
if (m_pDib==NULL)//在这停住了
{
m_pDib = new CDibPro;
}
return m_pDib;
}

编译通过,调试报错是
First-chance exception in defStress.exe: 0xC0000005: Access Violation.
watch一下:CXX0030:Error:expression cannot be evaluated

我感觉没有语法和逻辑错误
不过肯定是我错了
希望给位前辈给点提示,让我尽快发现自己的错误。谢谢

...全文
277 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQ_370566617 2006-06-07
  • 打赏
  • 举报
回复
我觉得是你的指针对象还没有生成

也就是类没有生成,在其他地方调有了

查查你的类的父类有没有生成,

QQ_370566617 2006-06-06
  • 打赏
  • 举报
回复
我查查
bobob 2006-06-06
  • 打赏
  • 举报
回复
这样的写法,不太好说
if (m_pDib==NULL)//在这停住了
这个判断必须要结合m_pDib被delete后马上m_pDib=NULL才有效,否则出现问题是必然
fireseed 2006-06-06
  • 打赏
  • 举报
回复
什么地方把内存写坏了

看一下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的输出窗口有什么异常

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧