c语言堆找静态存储区,C语言中堆内存、栈内存、静态数据存储区的理解

C语言中这几个概念还是很重要的,我们平时malloc函数申请到的就在堆区,是动态存储区;栈中申请到的内存在程序结束后就会自动销毁,静态数据存储区的空间是不能销毁的。

下面通过一个例子来说明:

#include

#include

#include

#include

using namespace std;

char *test(void)

{

char a[14] = "hello world";

char *q =(char *) malloc(sizeof(8));

if(NULL == q)

{

puts("memory malloc error");

return NULL;

}

free(q);

char *p2 = "abdce";

free(p2);

return a;

}

int main(void)

{

char *p =  test();

puts(p);

return 0;

}

上面程序运行将会出现内存奔溃,为什么呢?就是因为P2在数据存储区,这个区的内存是不能被free的,同理,假如free栈内存,那也是不允许的,会出现段错误。上面例子还有一点,就是返回了栈内存,这也是有问题的,返回栈内存结果得到的就是一堆垃圾。所以记住一个结论:

free只能用在申请到的动态内存,并且不能free一个已经free了的内存;不要return一个栈内存空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值