我的工程里有两个对话框,分别是主对话框CDlg和从对话框CSubDlg,在主对话框里通过点击一个按钮弹出从对话框。我在CDlg.h中的private里定义了:CList<CCai,CCai&> m_lst1; 其中CCai是我已经定义了的一个结构体,里面包括了几个变量,然后我就在CDlg.cpp里对m_lst1进行了一些操作;接着我又在CSubDlg.h中的private里定义了:CList<CCai,CCai&> m_lst2;然后在CSubDlg.cpp里对m_lst2进行操作。编译工程没有出现错误。但是在运行程序的时候,当我想点击主对话框里的按钮弹出从对话框的时候,系统弹出了一个错误提示:“0x00401a26”指令引用的“0x00000008”内存。该内存不能为“read”。
请问各位高手这是怎么回事?是哪里出现了问题?非常感谢!

解决方案 »

  1.   

    楼上的能不能说清楚一点啊?我感觉是使用CList类出现的问题,因为当我在从对话框不使用CList类的时候程序是没有问题的,但是我就是找不到错误的原因。
      

  2.   

    你都定义成private了还想访问啊?把你想访问的变量属性改成public
      

  3.   

    使用了NULL指针,把出错的相关代码贴出来。
      

  4.   

    改成public也不行,还是弹出内存错误:(
      

  5.   

    CSubDlg.h对CList类的定义:
    private:
    CList<CCai,CCai&> m_lst2;CSubDlg.cpp里对m_lst2进行的操作部分:
             ...
            CCai data;
    CFile File;
    DWORD dwRead;
    ZeroMemory(&data,sizeof(data));
    if (File.Open(FILEPATH,CFile::modeRead | CFile::typeText))
    {
    File.SeekToBegin();
    do
    {
    dwRead = File.Read(&data,sizeof(data));
    if (dwRead != 0 )
    {
    m_lst2.AddTail(data);               //将文件里的数据排成队列
    }
    }while(dwRead > 0);
    //关闭数据文件
    File.Close();
    }
    else  //没有文件
    {
    AfxMessageBox(_T("没有文件!"));
    return FALSE;
    }
    int n = m_lst2.GetCount();
    for(int i=0; i<n; i++);
    {
    POSITION pos = m_lst2.FindIndex(i);
                 data = m_lst2.GetAt(pos);
    if(m_combocaixi.FindStringExact(-1,data.caixi) == CB_ERR)
    {
    m_combocaixi.AddString(data.caixi);
    }
    //m_comboleibie.AddString(data.leibie);
    //m_combozuofa.AddString(data.zuofa);
    }
            ...
      

  6.   

    dwRead = File.Read(&data,sizeof(data));可能问题会处在这一句;sizeof(data)这样用不好;
      

  7.   

    在DEBUG下,从堆栈中查出哪一条语句引起崩溃的
      

  8.   

    我在主对话框里也是这样用sizeof(data)了,也没有发现什么错误。
    happyparrot,怎么在DEBUG下,从堆栈中查出哪一条引起崩溃啊?不好意思,我是新手!:(
      

  9.   

    你这问题与private无关,如果是private的问题,编译就会报错。
    看一下你的CCai是怎么定义的,如果里面不都是基本数据类型通常是不能执行清0操作的,可以在构造函数中对数据成员赋值。把ZeroMemory(&data,sizeof(data))这行代码删除掉试试。另外调试一下程序,标出执行到哪行出错。
      

  10.   

    ZeroMemory(&data,sizeof(data)); 
    如果你这个CCai类型里面包含复杂类型(类、指针等),这样初始化是错误的。应该用该类自己提供的初始化函数或者在构造时初始化。
      

  11.   

    经调试,程序执行到 data = m_lst2.GetAt(pos);这一句出现了错误,原来是上一句POSITION pos = m_lst2.FindIndex(i); 获取到的pos为0.不过我有点想不明白我在主对话框里也是这样用的没有错误啊,为什么在从对话框里用就出现错误呢? 
      

  12.   

    CCai和CSubDlg分别是怎么定义的?出问题的这段代码是在哪个函数里面执行的?