我在主对话框里创建一个堆,不同对话框间调用这个堆指针进行操作。
但是程序运行出现内存访问异常。代码如下:
//fistdlg.h
class CFirstDlg : public CDialog 
{
public:
CFirstApp();
         char *ptr;//堆指针
。。
}
//firstdlg.cpp
BOOL CFirstDlg::OnInitDialog()
{
CDialog::OnInitDialog();
 .............................
         ptr=new char[10];//创建堆
         ptr="1234567890";
}
//seconddlg.cpp
OnButton1()
{
  Cfirstdlg dlg;
  AfxMessageBox(dlg.ptr);//运行出错
怎么解决啊?还望高手指点.谢谢。 
 

解决方案 »

  1.   

    Cfirstdlg dlg;
    fxMessageBox(dlg.ptr);//运行出错
    OnInitDialog()还没有调用呢

    Cfirstdlg()
    {里面做
     ptr=new char[10];//创建堆
     ptr="1234567890";
    }
      

  2.   

    当你调用DOMODAL或是CREATEWINDOW时才会进入OnInitDialog,而且
    ptr=new char[10];//创建堆
    ptr="1234567890";
    不对.改成:ptr = new char[11];
    strcpy(ptr,"1234567890");
      

  3.   

    Cfirstdlg dlg;
    AfxMessageBox(dlg.ptr);//运行出错//方法1
    cfirstdlg dlg;
    dlg.Domodal();//这样才经过初始化InitDialog
    AfxMessageBox(dlg.ptr);//方法2(在initDialog中删除分配内存和赋值语句)
    cfirstdlg dlg;
    dlg.prt = "1234567890"//没有必要分配内存(如果一定要分配也可以)。
    AfxMessageBox(dlg.ptr);