指针函数不可以返回局部变量地址解决
Posted 七里橙花
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针函数不可以返回局部变量地址解决相关的知识,希望对你有一定的参考价值。
- 定义局部变量为 static变量。
- str指向一个字符串常量,字符串常量和静态变量类似,都是程序结束时,才释放内存
- 指针函数返回一个堆空间上的地址(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) ;没有释放申请的这块空间
以上是关于指针函数不可以返回局部变量地址解决的主要内容,如果未能解决你的问题,请参考以下文章
C语言基础:指针相关概念(指针的算术运算 指针数组指向指针的指针 传递指针给函数 从函数返回指针 )为啥C 语言不支持在调用函数时返回局部变量的地址?