定义了
CArray<CStringArray*,CStringArray*> arrItems;cstringarray item;
item.Add(..);
item.Add(..);
然后添加 arrItems.Add(&item);但是,添加以后,再输出arrItems.getAt(0)->getAt(1)的时候,就会指针出错。得出arrItems.getAt(0)->getSize()==2。为什么输出第二个元素的时候出错呢?

解决方案 »

  1.   

    不知道你要实现什么 不过结果应该可以出来
    CArray<CStringArray*,CStringArray*> arrItems; CStringArray item;
    item.Add("123456");
    item.Add("456789"); arrItems.Add(&item); CStringArray* Temp = arrItems.ElementAt(0);
    CString tt = Temp->ElementAt(0);//输出 结果为"123456"
      

  2.   

    void CSetProject::OnSelchangeComboItem()
    {
    .........SaveCurPage(nOldItem);FillInList(infoString);
    }
    void CSetProject::SaveCurPage(CString m_string)
    {
    CStringArray item;
    item.Add("123");
    item.Add("456");
    arrItems.Add(&item);
    afxmessagebox(arrItems.GetAt(0)->GetAt(0));//此时可以正确输出
    }void CSetProject::FillInList(CString infoString)
    {
    for(int i=0;i<arrItems.GetSize();i++)
    {
    if (arrItems.GetAt(i)->GetAt(0).CompareNoCase(infoString)==0)//此时报出指针错误 当i==0时,arrItems.GetAt(i)->GetAt(0)就报错
    {
    .....
    }
    }为什么这样就报错呢?郁闷
      

  3.   

    if (arrItems.GetAt(i)->GetAt(0).CompareNoCase(infoString)==0)
    你这是要做什么判断?
      

  4.   

    跟了一下,在SaveCurPage函数里,我可以得到arrItems.GetAt(0)->GetSize()的正确值,可是在
    FillInList中,我重新定义了一个int变量,去取arrItems.GetAt(0)->GetSize()的值,这时候,就只能得到0xffffff了。不知道为什么
      

  5.   

    if (arrItems.GetAt(i)->GetAt(0).CompareNoCase(infoString)==0)判断arrItems.GetAt(i)->GetAt(0)和infoString的值是否相同
      

  6.   

    因为你定义的是一个指针数组,所以存进去的CString全部都需要new出来.
    栈上的临时变量在他的生存周期之外就不能访问了.
    记得在程序退出的时候把数组中的元素挨个delete.
      

  7.   

    to:LiveALearn(研究GDI) 这个数组的元素都是cstringarray。那么我添加cstringarray的元素的时候,也需要new嘛?这个数组是一个全局的。我每次取它的元素的size的时候,虽然是在不同的函数里取值,但是是在每个函数里单独定义一个新的局部变量,然后再取值,这样,就不存在你说的问题了
      

  8.   

    item.Add("123456");
    item.Add("456789"); arrItems.Add(&item);
    CString infoString = "123456";

    for(int i=0;i<arrItems.GetSize();i++)
    {
    if (arrItems.GetAt(i)->GetAt(0).CompareNoCase(infoString)==0)
    ::AfxMessageBox("相同");
    else
    {
    ::AfxMessageBox("不同");
    }
    }
    没有出现任何问题....
      

  9.   

    void CWindowsBackDlg::OnBnClickedSetbackButton()
    {
    //// TODO: 在此添加控件通知处理程序代码 CSetPicChange pic;
    pic.GetPic("c:\\Pic01.JPG",1536,2048,1024,768);

    item.Add("123456");
    item.Add("456789");
    arrItems.Add(&item);
    }void CWindowsBackDlg::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    CString infoString = "123456";

    for(int i=0;i<arrItems.GetSize();i++)
    {
    if (arrItems.GetAt(i)->GetAt(0).CompareNoCase(infoString)==0)
    ::AfxMessageBox(arrItems.GetAt(i)->GetAt(0));
    else
    {
    ::AfxMessageBox("不同");
    }
    }
    }
    完全正常显示~
      

  10.   

    ---------------------------
    exe - 应用程序错误
    ---------------------------
    "0x6bc87bc2" 指令引用的 "0xcccccccc" 内存。该内存不能为 "read"。
    要终止程序,请单击“确定”。
    要调试程序,请单击“取消”。
    ---------------------------
    确定   取消   
    ---------------------------
    报这个错哪里有不同啊。item定义有什么不同嘛?是new出来的?
      

  11.   

    .h中的定义和你的一样
    CArray<CStringArray*,CStringArray*> arrItems;
    CStringArray item;
      

  12.   

    哈.开始找不同的地方.玩过那个游戏没..呵.STL里的这些东西都不要NEW的.
      

  13.   

    唉。CStringArray item 声明为成员变量以后,就没问题了。在函数里声明成局部变量就不行
      

  14.   

    不好意思,没看清除你是CArray<CStringArray*,CStringArray*> arrItems;但你的问题就是出在arrItems添加的是一个局部变量.CStrngArray* pSA = new CStrngArray;
    pSA->Add("111");
    arrItems.Add(pSA);
    你试试这么做访问数组还崩溃不?记得程序结束要释放指针哈.