c - 空指针取消引用未初始化的内存是否属于内存损坏

标签 c memory memory-management

在维基百科中,memory corruption定义如下:

Memory corruption occurs in a computer program when the contents of a memory location are unintentionally modified due to programming errors; this is termed violating memory safety.

但在后续的描述中,空指针取消引用和未初始化的内存都被视为内存损坏。

我有点困惑。空指针取消引用和未初始化的内存不会无意中修改内存位置的内容。为什么它们被视为内存损坏?

最佳答案

“内存损坏”不是一个正式的术语,因此寻找正式的定义意义不大。此外,维基百科不一定是规范的信息来源。

空指针访问可能会也可能不会导致内存损坏。这主要取决于系统是否允许写入地址 01)

同样,使用指向任何随机位置的未初始化或“悬空”指针可能会导致任何类型的行为,包括内存损坏。

这些都属于正式术语未定义行为,这意味着如果您调用此类行为,任何事情都可能发生。


1) 理论上,C 语言禁止编译器为空指针提供可能对应于目标上真实地址的地址。实际上,编译器通常不这样做,而只是使用地址零。这是许多微 Controller 系统或其他允许直接访问物理内存的计算机上的有效地址。

关于c - 空指针取消引用未初始化的内存是否属于内存损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43094120/

相关文章:

C动态分配结构数组及其组件

linux - Linux RSS 不等于 java Xx + MaxMetaspaceSize 吗?

scala - 在 Spark 中处理超过 3GB 的记录大小

objective-c - 保留/分配内存管理

java - 在 Java 中重用具有常量后缀的字符串的最佳实践

c - 两个不同程序中数据类型的复杂性有何区别?

c - 在 2 个对等点之间传输文件时防止超时

c - 在 C 中使用 sizeof 运算符为 float 据类型 (5.0) 分配 8 个字节而不是 4 个字节

Java -Xmx 命令没有给我预期的内存

android - Android 中正确使用自定义字体