c - 尝试在C中通过空地址访问数据?

标签 c memory-management struct

只是一个好奇的问题。如果我尝试从具有 NULL 值的地址访问数据,会发生什么情况。 例如:如果我有一个存储 ulog 的结构指针 NULL 并且编译器(在我的例子中是 GCC)遇到 ulog->data=12

我主要想知道这是否会扰乱我的内存,与控制语句一起使用时是否返回 NULL 以及编译器会发生什么情况?

最佳答案

清除条款:

  • NULL是一个空指针常量(7.19/3)。
  • 空指针常量可以是值0(void*)0 (6.3.2.3/3)。
  • 当将空指针常量分配给任何类型的指针时,生成的指针将变为空指针,保证与任何其他指针(指向对象或函数)比较不相等)(6.3.2.3/3)。

您无法真正知道给定系统上空指针的实际表示。如果您尝试像有效地址一样访问它,会发生什么情况,但标准并未指定 - 这是未定义的行为。

意味着任何事情都可能发生,包括段错误、总线错误、什么都没有、程序开始疯狂运行等等。

关于c - 尝试在C中通过空地址访问数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52853914/

相关文章:

c - 指针调用的结构成员分配了不同的值

java - 为什么Java程序的执行时间比C语言中的相同程序要长?

c - 关于 inet_ntoa()

c++ - 访问任何进程的内存

c - 如何制作动态分配的结构数组?

c - ANSI C - 将节点附加到任意树

c++ - 以下类型的声明是否完全有效?

c - 同一 printf 指令中的 itoa() 和 atoi() 无法正常工作

linux - 为什么Linux中的物理内存是线性增加而不是一次性分配的?

c++ - 使用 C++ 在 Arduino 上编写复杂的程序。如何正确使用对象或更好地使用普通 C?