关于函数返回指针、字符串的问题

ccwd002 2003-04-06 09:20:32
好像很容易在这个地方出错,如内存泄漏啊等等,有没有谁能总结一下,或者说提出一个好的编程方法
...全文
86 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
husarb 2003-04-09
  • 打赏
  • 举报
回复
仔细看看林锐的高质量编程,里面有你想要的答案的
newhawk 2003-04-09
  • 打赏
  • 举报
回复
内存泄漏是个麻烦的问题,所以一般我尽可能的在栈上先分配好一块内存(定义一个字符数组即可),在作用域外编译器会自动销毁,收回内存,而慎用在堆上的内存动态分配,比如new。
还有两个问题值得注意
一个是字符串的初始化,这个很重要
还有一个是在涉及到指针时,要明白它只是一个4 bytes长的地址,用它前先要确认它指向的内存是否存在,是否合法,是否会覆盖其他的数据等
oyd 2003-04-09
  • 打赏
  • 举报
回复
鉴于你的问题,简单的声明为static char * ch=new char[100];
以后return ch就可以了。这样不需要回收,以后再调用函数也是用的同一块空间。
另外,用传入的指针做参数也是很好的选择,如
char * func(char * buf,int data)
{
...
return buf;

}
这样对于buf的释放就不用本函数关心,是调用者的事了
darkhawk 2003-04-07
  • 打赏
  • 举报
回复
建议以下方式:
1.return "ok"; 字符串ok会被编译器写入符号表中,所以,这样使用是安全的.
2.使用外部函数分配的空间.如void getvalue(char* sz, int size);其中sz是外部调用函数分配的空间.
3.使用全局变量.(建议不用)
4.在函数内部分配空间,记得在调用函数中释放.
char *getvalue()
{
return new char[100];
}
5.比4更好的方式是,传递一个动态分配的指针给函数.
void getvalue(char*& pBuff)
{

if(pBuff)
delete pBuff;
pBuff = new char [100];
}

不能使用的方法:
1.传递函数内部字符串变量(在某些情况下可能会好用,但是很危险).
char getvalue()
{
char sz[100];
return sz;
}
lplpzhuzhu 2003-04-07
  • 打赏
  • 举报
回复
尽量不要返回指针
但是可以使用返回参数是指针
即把要返回的指针作为一个函数的参数
这样比较安全
arya 2003-04-07
  • 打赏
  • 举报
回复
最简单的解决方案,不要返回指针,或者指向大对象的指针。相反,在调用函数里管理内存,然后把分配好内存的指针传递给被调用函数,由被调用函数来赋值。这是不那么优雅的做法。但是简单,高效,安全。
ccwd002 2003-04-07
  • 打赏
  • 举报
回复
看了高质量编程,没找到我想要的答案。
例如我想实现这样一个函数
char * Func(MyDataType data)
{
...//怎么声明字符串并返回呢?
//是用char *ch=new char(NUM)还是static char ch[NUM]还是其他方法
}
main()
{
MyDataType data;
char *p=Func(data);//可能会多次调用这个函数
cout<<p<<endl;
... //如果此后需要strcat(p,"...");会有问题吗
}

如何是好
robertnet 2003-04-06
  • 打赏
  • 举报
回复
就这么说也不能说出个什么道理来,还是自己多看书吧。
bugfree 2003-04-06
  • 打赏
  • 举报
回复
现在正是读, Effective c++ 的时候, 都完后相信你就不在迷茫, 他就像午后的一杯茶, 让你清新...
ckacka 2003-04-06
  • 打赏
  • 举报
回复
这个的确是个经典问题,就简单而普遍的解决办法和错误总结有本非常好的书
《高质量C++/C编程指南》- 林锐博士

这里是下载地址
http://www.vckbase.com/tools/listtools.asp?tclsid=201

你看了之后会大受裨益的!!!!

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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