动态指针变量不能作为返回值!

 

注意下面的代码,本意是想返回一个字符串, 但当它返回调用者的时候, 返回串却是垃圾信息。 :

	char *itoa(int n)
{
char retbuf[20]; /* 错!redbuf为自动变量*/
sprintf(retbuf, "%d", n);
return retbuf; /* 错!自动变量此时将销毁*/
}
一种解决方案是把返回缓冲区声明为
    static char retbuf[20];

本方案并非完美, 尤其是有问题的函数可能会递归调用, 或者会同时使用到它的多个返回值时。

那么返回字符串或其它集合的争取方法是什么呢?

返回指针必须是:
1.静态分配的缓冲区;
2.调用者传入的缓冲区,
3.用 malloc() 获得的内存,
不能是局部 (自动) 数组。

 注意:局部变量在函数返回时就会释放, 但是在指针变量这个问题上, 这表示指针被释放, 而 不是它所指向的对象。用 malloc() 分配的内存直到你明确释放它之前都会保留在那里。 一般地, 对于每一个 malloc() 都必须有个对应的 free() 调用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值