在维基百科中,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/