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

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

 

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

16. 指针函数和函数指针

C语言基础:指针相关概念(指针的算术运算 指针数组指向指针的指针 传递指针给函数 从函数返回指针 )为啥C 语言不支持在调用函数时返回局部变量的地址?

关于函数返回值为指针类型的分析

直接使用运算符的地址与使用指针变量返回局部变量的地址

转函数返回局部变量

关于局部指针的一点总结