首页 > 其他 > 详细

指针函数不可以返回局部变量地址解决

时间:2021-05-16 10:04:59      阅读:13      评论:0      收藏:0      [点我收藏+]
  1. 定义局部变量为 static变量。
  2. str指向一个字符串常量,字符串常量和静态变量类似,都是程序结束时,才释放内存
  3. 指针函数返回一个堆空间上的地址(malloc申请的) ——这个上课经常用。。原来这个意思

对于第二种情况例子:

在函数里定义char p[] = "hello,world";返回p,p是指向栈区的指针,该指针的地址不是 NULL,但其原来的内容已经被清除,新内容不可知,主函数调用该函数后,栈区空间被释放,但是返回的指针仍然指向栈空间,造成内存泄露,该栈区可能用作其他用途,存储其他内容。因此打印内容未知。char p[]改成char *p这个时候p指向的就是字符串常量,可以打印出来。

对于第三种情况例子:

void GetMemory(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}

能够输出字符串,但是会有内存泄漏问题。(?了解下内存泄漏和内存溢出)没有检测内存申请失败情况if(NULL == p)  ;没有释放申请的这块空间

 

指针函数不可以返回局部变量地址解决

原文:https://www.cnblogs.com/qilichenhua/p/14773048.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!