当前位置:首页 > 内存 > 正文

c语言使用未初始化的内存

  • 内存
  • 2024-05-13 00:00:05
  • 5860

一、c语言提示使用了未初始化的局部变量您的局部变量m未初始化,应初始化为m=0;
二、C语言,使用了未初始化的局部变量当局部变量未初始化并且在第一次赋值之前引用该变量值时,将报告有关使用未初始化的局部变量的警告或错误。
局部变量定义的形式为
TYPEvar=init_value;
表示定义一个类型为var、名称为var的局部变量,并初始化为init_value。
其中=init_value部分可以省略。此时,var的初始值将是一个随机值,由编译器或运行时环境决定。
如果一个初始值未知的var被定义为
TYPEvar;
,并且在赋值之前引用了它的值,比如打印、参与计算等,那么var的值是不确定的,从某种意义上来说,此时的输出有什么值,与程序的结果无关。
所以如果发生这种情况,编译器会发出警告或错误来提醒你这种不确定因素的存在。
对于大多数编译器来说,只报告警告,但不报告错误。
三、C语言中未初始化的变量的值是0么

全局变量和静态变量的初始值为0,局部变量和自动变量的初始值是随机分配的。

你通过在栈上移动栈指针来定义局部变量,这实际上为程序提供了内存空间来绑定局部变量名。由于该内存空间位于堆栈上,并且由于堆栈内存会被重复使用,因此使用堆栈实现的局部变量的值为0,除非在定义它们时显式初始化它们。

全局变量是在链接时分配空间的,当程序运行时,操作系统的加载器负责为链接器分配全局变量的虚拟内存空间,并映射到初始化的页面。初始化为0,所以是0。全局和静态默认初始化是通过加载机制实现的。此外,未初始化的符号位于目标文件的bss部分,初始化的符号位于数据部分。

扩展信息

C语言变量存储类型、变量初始化

存储变量值的内存类型,包括通用内存、Runtime堆栈、硬件寄存器。默认存储类型与声明变量的位置有关。在代码块外部声明的变量(例如全局变量)存储在静态内存中而不是堆栈中,并且在程序执行期间始终存在。在代码块中声明的变量的默认存储类型为自动,称为自动变量。它存储在堆栈中,并在执行代码块时创建。

可以通过添加static关键字将自动变量更改为静态存储类型。它在程序执行期间始终存在,但其作用域不会改变,并且不能在代码块之外使用。。使用这个变量: