c - 取消引用大小为 Legal 的未初始化指针吗?

标签 c

<分区>

给定以下代码,它在 C 中是否合法? (C89、C99 等等?)

DATA_STRUCT *ptr;

ptr = malloc(sizeof(*ptr) + 400);

memset(ptr, 0, sizeof(*ptr)); // clearing only the structure itself (not the 400 additional bytes).

我知道 VLA 和 sizeof 在运行时被评估,但对于所有其他情况,它总是在编译时吗?


编辑: 从答案中我看到这可能是由于:

  1. 一个编译器错误
  2. 堆损坏

1 似乎不太可能,所以我倾向于 2。 无论哪种方式,这都需要进一步调查。

最佳答案

是的,您的代码是合法的。不过,*ptr 周围的括号不是必需的。

关于c - 取消引用大小为 Legal 的未初始化指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21996765/

相关文章:

c - 在 C 中处理大 float 据

c - 为什么编译器拒绝我的 execv 函数调用?

C中的凯撒密码,大写和小写

c - gdb 错误地计算了包含 '#' 的 args

c - 移位何时会导致未定义的行为

c - 哈希函数中的段错误(C)

c - 如何使用是/否提示进行重复?

c - 在 C 中使用 Realloc

c - 在 for 循环中使用全局变量

C++ 抛硬币模拟器不工作