C语言 未初始化读是什么意思?



有人说未初始化的read正在访问未写入但已分配的内存空间。也有人说它正在访问一个未命名的内存空间。所以我在这里再次确认一下意思,顺便说一句:你能简单解释一下我写的是什么吗?和";allocated"的意思。

没有完整的上下文很难说,但这里是最好的猜测——

uninitialized read——当从内存中读取变量或结构而没有向其写入值或默认值时,您会说这个。因此,您正在读取初始化(随机)数据。如果黑客可以写入内存位置,他们可能会导致您的系统运行异常。*

要修复:确保所有分配的数据和结构都有默认值写入。

未分配内存——这是没有特别标记为应用程序使用的内存。这意味着任何应用程序或系统都可以写入该内存并影响您的系统(因为您不是从为您的应用程序指定的空间中读取)。

修复:确保你使用你选择的内存管理系统分配所有的内存。

*已经指出该系统无论如何都可能表现出意想不到的行为,但系统可以由外部机构控制这一事实是我的观点

你能简单解释一下我写的是什么吗?和";allocated"的意思。

"已分配"表示内存已被指定用于特定用途。

int x;出现在C程序的函数中时,会自动为它分配内存。(这是自动的,因为编译器安排为x保留内存,所以这个函数的作者不必做任何其他事情来获得内存。)内存也可以通过其他方式分配,比如通过显式请求,C有一些规则来决定声明是否保留内存,这可能有点复杂。

当以这种方式自动分配内存时,它不会自动初始化。这意味着程序已经决定将内存的某一部分用于x,但它没有将任何值放入其中。该内存可能包含先前使用时剩余的值,或者它可能包含操作系统在将其分配给程序之前清除它时的零,或者它可能包含其他内容。(此外,由于C标准的规则和现代编译器的复杂性,未初始化的内存可能会导致程序中的复杂性。它的工作方式可能会让初学者感到困惑。)

要确保内存有一个已定义的值,您应该初始化它。这可以在定义中完成,如int x = 3;,也可以稍后完成,如x = 3;

为对象赋值也称为向内存写入、向内存存储、向对象存储和赋值。所以,如果你已经将一个值写入了一个对象,你就已经初始化了它。("初始化"通常是指第一次将值写入新对象,但当我们将其值重置到某种意义上我们认为"较早"的状态时,我们也可以说我们是在"重新初始化"某物。)

有人说未初始化的读正在访问未写入但已分配的内存空间。还有人说它正在访问一个未指定的内存空间。

"未初始化读取"是一个有点粗糙的术语。正确地说,我们可以说"读取未初始化的内存",这确实是读取未初始化的内存。即使为新对象分配的内存,比如x,以前曾用于其他对象,一旦为新对象重新指定且尚未写入,我们将该内存称为未初始化。

" Uninitialized read "并不意味着访问未分配的内存。

最新更新