内存的动态分配

 

段错误:就是地址非法使用了

1.存放局部变量或者函数的参数(static为什么会延长,因为存储位置发生改变)

2. 特点:由系统开辟和释放。

代码演示

#include

Char *fun()

Int main(void)

{

    Printf(“%s\n”,fun());

    Return 0;

    //正常结束 return-1异常结束。

}

Char *fun()

{

    Char st[] = “hello”;//存放在栈区,栈区由系统开辟和释放

    Static char st[] = “hello”//延长生命周期 把st放到了.data区 。程序结束内存才释放

    Return st;

    Return :表示结束子函数的所有操作,返回到调用函数。

}

不加static修饰时先看主函数,主函数进行了函数调用,到子函数里面hello存放在栈区作用区域只是在这个子函数中。当数组的首地址返回被调用函数接受时。数组st里面的东西就已经被释放了里面没有任何东西,这个区域已经不属于st了,但是这个区域还是存在的。然后你再在这个地址上用%s打印的话是打印不出来任何东西的。

加了static 先看主函数,里面进行了函数的调用,然后进去子函数里面,由于数组被static修饰了 数组的存储位置由栈区改变到了全局区或者静态区,生命周期是整个函数,直到函数结束才被销毁。然后函数st的首地址被函数接受,然后函数再用%s打印 就可以打印出内容。

 

 

堆区:

Malloc申请的生命周期从malloc申请到free

特点:从malloc申请到free的空间否可以使用

第三个没有被释放。

常量区:

 Char*st=”hello“;

St在栈区。

Hello在常量区 生命周期是程序结束。

 

.bss .data静态区或者全局区

.bss

1.段存放的是未初始化的全局变量和静态变量以及已初始化为零的全局变量和静态变量

2.生命周期 程序结束

.data

1. 已经初始化的全局变量和静态变量 但初始化不能为零。如果初始化为零不在.data区在.bss段

为什么没有初始化的全局变量值为零

因为存放在.bss段

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值