应用程序错误:
“0x00402f27”指令引用的“0xcccccdc”内存,该内存不能为“written”,这是个什么错误?接着就是弹出Image.exe 遇到问题需要关闭。但是,编译的时候没问题,运行的程序的时候,就总是弹出这个问题。
原因是在×××Dlg::OnInitDialog()里多加了一个语句:m_controller->run();
就出现这个问题,如果去掉就没这个问题,我想问一下这是因为内存分配有冲突吗?还是什么问题?该如何解决??请高手指点。万分感激!!错误报告内容:
Exception Information
Code: 0xc0000005  Flags:0x00000000
Record:0x0000000000000000     Address:0x0000000000402f27System Information
Windows NT 5.1 Build:2600
CPU Vendor Code:756E6547 - 49656E69 - 6C65746E
CPU Version: 000006FD  CPU Feature Code: BFEBFBEE
CPU AMD Feature Code:00FBE824Module 1
Image.exe
Image Base:0x00400000  Image Size: 0x00000000

解决方案 »

  1.   

    m_controller  这个控件或者变量是不是没有初始啊,run的时候用到了没有初始的东西。或者m_controller其本身就没有初始化
      

  2.   

    m_controller应该在构造函数中,m_controller=NULL;
    然后,在OnInitDialog函数中,加上如下语句:
    if (m_controller==NULL)
    m_controller= new ...
    然后再调用m_controller->run(); 
    当然,如果m_controller需要其它初始化调用后,在申请空间成功后,调用一下!
      

  3.   

    我在ImageDlg.h里定义了:
    protected:
      Controller* m_controller;然后再ImageDlg.cpp 的
    ImageDlg::OnInitDialog()里多加了一个语句:m_controller->run(); 而Controller.h里是这样的
    class Controller 
    {
       public:
             
          void run() 
    {
       ......
    }
    }问这个也需要初始化吗?
      

  4.   


    当然,需要new一个指针变量。不然该指针为空
      

  5.   

    在ImageDlg构造函数中或者在ImageDlg::OnInitDialog()中m_controller = new Controller;然后再调用
    m_controller->run(); 
      

  6.   

    你这样肯定要啦,要不m_controller这个变量是空的,肯定会错误的,楼上已经说了,先判断是否为空
    如果是空的话就先new,new出来的记得销毁的时候要delete要不你的类变量就不要定义成指针,直接定义成实例:Controller m_controller;
    之后用的时候就用m_controller.run(); 
      

  7.   

    一定要 new Controller的,指针呀,建议楼主看看关于指针的基础知识,呵呵
      

  8.   


    内存分配问题是解决了,但是还是没有完全解决,编译没问题,运行时还是弹出下面这个对话框:Image.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。
    如果您正在进程当中,信息有可能丢失
    关于此错误的其他信息,请单击此处。
    调试(B)  关闭(C)
      

  9.   


    我只是给你举了一个例子,因为我不知道你的Controller类是干什么用的。你应该要调用正确的Controller类构造函数。
    在构造函数中会初始化一些必要条件或变量,这样才能保证你的指针正确调用。new一个空构造函数只能保证内存没有错误,不能保证运行正常。如果不介意发你的程序,你把程序发我邮箱,我给你看看。[email protected]