比如输入CString ss(“1 2 4 8 12”),输出CArray<int,int> a
函数如下:
CArray<int,int>& CRun::StringToInt(CString &ss)
{
    CStringArray arrTemp;  
    char *p;
    int nLen = ss.GetLength();
    char* pp = new char[nLen+1];
    pp[nLen] = 0;
    lstrcpy(pp, ss.GetBuffer(0));
   for ( p=strtok(pp," ");p!=NULL; p=strtok(NULL, " "))
{
arrTemp.Add(p);
}
    CArray<int,int> a;
for(int i=0;i<arrTemp.GetSize();i++)
{
a.Add(atoi(arrTemp.GetAt(i)));
}
return a;
}
程序运行过程出现未知错误,请高手赐教!

解决方案 »

  1.   

    GetBuffer后用ReleaseBuffer,其他的就DEBUG
      

  2.   

    返回类型是一个数组引用,而你返回的却是函数内的一个局部变量,离开函数对象就销毁了,你返回的引用也就变成野指针了。局部变量用new就可以,但要记得delete;
    或者返回类型设为null,将array做为引用参数传入。
      

  3.   

    如果要返回引用,可将 CArray<int,int> a;设成全局变量或静态变量
      

  4.   

    可以看看Effective C++, item 23
      

  5.   

    这段代码存在两个问题:
    1.char* pp = new char[nLen+1];,没有删除这个指针,内存泄漏。
    2.反回了一个局部定义的数组,反回时该数据自动调用了柝构函数,内容全部删除了,引用的东西不存在了。