关于函数的指针动态分配内存的问题

#include<stdio.h>char*returnStr(){char*p="helloworld!";returnp;}intmain(){char*str;st... #include <stdio.h>
char *returnStr()
{
char *p="hello world!";
return p;
}
int main()
{
char *str;
str=returnStr();
printf("%s\n", str);

return 0;
}
#include <stdio.h>
char *returnStr()
{
char p[]="hello world!";
return p;
}
int main()
{
char *str;
str=returnStr();
printf("%s\n", str);

return 0;
}

想问下 这俩个函数中的p是不是都是函数的局部变量?
如果都是局部变量的话,那么他们应该都是“栈”上分配内存的啊。当函数结束的时候,都会被pop出来而销毁的。
展开
 我来答
coolxp2005
2009-03-27 · TA获得超过823个赞
知道小有建树答主
回答量:202
采纳率:0%
帮助的人:162万
展开全部
第1个,p是局部变量,但其指向的内存是全局的。函数返回后,虽然p本身销毁了,但它指向的内存仍存在,故不会有问题

第2个,数组p是局部的,返回后,数组内存被销毁,故有问题。

注意:第1个里面,字符串常量是占用全局内存(跟全局变量一样),其空间是程序加载时就分配了的(虽然在源代码中是出现在函数内部)。
第2个中,p是函数运行时临时在栈上分配的数组。
科技鸟
2009-03-27 · TA获得超过1251个赞
知道小有建树答主
回答量:865
采纳率:0%
帮助的人:0
展开全部
p都是函数的局部变量
他们确实占用了内存,但是函数返回后自动释放了,他们是非静态变量,释放后其内容不再可以读,但是可以写。如果用指针用new申请了动态内存才要释放,才可以避免内存泄露。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式