char*函数调用

错误代码:

char *func()
{
   return "123";
}
main()
{
   char *p=new char[32];
   p=func();
   delete p;
}

错误分析:p刚开始指向堆上一段内存,后来指向常量(程序运行期间始终存在于一段内存里),delete释放的就不是刚开始开辟的那段堆上内存。
这错误属于new和delete理解不到位,问题出在外部调用函数。
另外一种常见错误返回函数内的指针时,要注意在函数返回后是否被销毁,问题出在函数内,如下:
定义指向常量区的指针

char *GetString(void) 
{ 
char *p = "hello world"; 
return p; 
} 

这样p是指向常量区的指针,这个值可以做为函数返回值返回的
函数结束以后,变量p就不存在了

char *GetString(void) 
{ 
char p[] = "hello world"; 
return p; 
} 

这样p是局部字符数组变量,内容是从常量区复制过来的
函数结束以后p就消失了,所以这个返回是不行的

这两个不同就在于指针指向的地址不同,
char *p, 函数结束后,地址存在,
char p[], 函数结束后,地址无效了

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值