100分程序找错,由Cstring对象转化为整型数组问题

wsj0701 2005-10-10 11:23:30
比如输入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;
}
程序运行过程出现未知错误,请高手赐教!
...全文
144 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
libraworm 2005-10-10
  • 打赏
  • 举报
回复
返回类型是一个数组引用,而你返回的却是函数内的一个局部变量,离开函数对象就销毁了,你返回的引用也就变成野指针了。

局部变量用new就可以,但要记得delete;
或者返回类型设为null,将array做为引用参数传入。
38062708 2005-10-10
  • 打赏
  • 举报
回复
编译出现警告,因为你要返回的地址是个局部变量,该函数运行完毕后该变量就销毁了,所以你返回该地址是不对的
快乐鹦鹉 2005-10-10
  • 打赏
  • 举报
回复
我测试了一遍,没有错误啊。正确分解了。
Kudeet 2005-10-10
  • 打赏
  • 举报
回复
GetBuffer后用ReleaseBuffer,其他的就DEBUG
快乐鹦鹉 2005-10-10
  • 打赏
  • 举报
回复
调试一下不就知道了么。自己进行调试啊。
zxyjyzxyjy 2005-10-10
  • 打赏
  • 举报
回复
这段代码存在两个问题:
1.char* pp = new char[nLen+1];,没有删除这个指针,内存泄漏。
2.反回了一个局部定义的数组,反回时该数据自动调用了柝构函数,内容全部删除了,引用的东西不存在了。
guangyou 2005-10-10
  • 打赏
  • 举报
回复
做事要细心,注意变量的范围.
DentistryDoctor 2005-10-10
  • 打赏
  • 举报
回复
返回局部变量的引用带来的问题。
balloy 2005-10-10
  • 打赏
  • 举报
回复
可以看看Effective C++, item 23
  • 打赏
  • 举报
回复
如果要返回引用,可将 CArray<int,int> a;设成全局变量或静态变量

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧