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

Posted 七里橙花

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针函数不可以返回局部变量地址解决相关的知识,希望对你有一定的参考价值。

  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)  ;没有释放申请的这块空间

 

以上是关于指针函数不可以返回局部变量地址解决的主要内容,如果未能解决你的问题,请参考以下文章