CString * str;
str=new CString();
str->Format("110");
m_list.SetItemData(1,(WORD)s); //m_list为ListCtr
然后我读取CString * s;
s=(CString *)m_jk.GetItemData(1);
AfxMessageBox(*s);编译通过了,但是在运行时, 读取老是暴 内存错误。什么不能为“read”那种。我不知道是那里问题,请各位老师多指点。如果能给一个正常运行例子感激不尽。 我网上搜了好久。就是解决不了

解决方案 »

  1.   

    用WORD肯定是有问题了。内存地址一般都会大于WORD的值范围,改成DWORD
    m_list.SetItemData(1,(DWORD)s); 
      

  2.   

    DWORD或DWORD_PTRSetItemData(index, (DWORD_PTR)xxx);
      

  3.   

    谢谢上边两位老师。我试过了, 语句是到  AfxMessageBox(*s); 时报的错误。 去掉这句都正常,怎么样才能正常输出啊?
     
      

  4.   

    m_list.SetItemData(1,(WORD)s);
    改成
    m_list.SetItemData(1,(DWORD)s);
      

  5.   

    你上边的列表控件叫m_list,下面叫m_jk ......
      

  6.   

    我改过来了。用了m_list.SetItemData(1,(DWORD)s); 但是AfxMessageBox(*s); 仍然是在运行时报错误。 添加 和  写入在不同的两个 按钮 处理函数中。
    void CExp65Dlg::OnButton1() 
    {

    CString * str; 
    str=new CString(); 
    str->Format("110"); 
    m_list.AddString("first");
    m_list.SetItemData(1,(DWORD)str); //m_list为ListCtr 
    }void CExp65Dlg::OnButton2() 
    {

    CString * s;
    str=(CString *)m_list.GetItemData(1); 
    AfxMessageBox(*s);            <-----------------运行时就是到这弹出的内存不能为“read”的
    }                                               错误框。到底是怎么回事?
      

  7.   

    上边又发错了 对不起我改过来了。用了m_list.SetItemData(1,(DWORD)s); 但是AfxMessageBox(*s); 仍然是在运行时报错误。 添加 和  写入在不同的两个 按钮 处理函数中。 
    void CExp65Dlg::OnButton1() 
    { CString * str; 
    str=new CString(); 
    str->Format("110"); 
    m_list.AddString("first"); 
    m_list.SetItemData(1,(DWORD)str); //m_list为ListCtr 
    } void CExp65Dlg::OnButton2() 
    { CString * s; 
    str=(CString *)m_list.GetItemData(1); 
    AfxMessageBox(*str);            <-----------------运行时就是到这弹出的内存不能为“read”的 
    }                                              错误框。 到底是怎么回事? 
      

  8.   


     m_list.SetItemData(1,(DWORD)str); //m_list为ListCtr,这里的1应该是0,你只加了一个元素,序号是从0开始
     str=(CString *)m_list.GetItemData(1);//这里的1错了,应该是0,原因同上.
      

  9.   

    listbox还是listctrl怎么还有AddString?