项目未初始化本地变量visual_变量在内存的不同区域介绍

1cfb10340f7de52fdbfc413145cbd6d2.png

计算机内存一般分为代码区和数据区:

  • 代码区:存放程序代码
  • 数据区:存放程序编译和运行过程中的常量和变量。

数据区包括:文字常量区、静态数据区、堆区、栈区。

1、文字常量区

存放常量,如字符串常量。

char *p = "china"; //指针p指向常量区的"china"

常量区存放的数据一旦初始化就不能修改。在编译时分配,程序运行结束后由系统释放;

2、静态数据区

存放全局变量和静态变量(用static声明的变量)。初始化的全局变量和静态变量在一块区域(.data),未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(.bss)。在编译时分配,一直保存到被新的数据覆盖或进程退出。

4ff89fde3a982eb248282b5000a19c01.png

3、堆区

存放局部变量、函数参数、函数入口地址等,主要存放临时数据。由编译器分配和释放,变量的有效性会随程序运行而改变,如函数执行完后,该函数中的局部变量就被踢出栈。

4、栈区

由程序员分配管理,通过malloc申请内存,通过free释放。如果忘记释放,就会造成这片区域一直无法访问,造成内存泄漏。程序退出后,系统会自动回收。

下面通过一段代码来介绍:

e81b9720639eea197b9c5e659ddb2061.png

这里需要注意的是,“free(s)” 释放的是指针变量 s 所指向的内存,而不是指针变量 s 本身。

指针变量 s 并没有被释放,仍然指向原来的存储空间,但现在指针指向的这块内存是不合法的,称为“野指针”。

因此,在释放内存后,必须把指针指向 NULL,防止指针在后面不小心又被引用了。

相关阅读

C程序中常见的与内存相关的错误

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值