取消引用法定大小的未初始化指针?

时间:2014-02-24 19:12:29

标签: 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. 堆损坏
  3. 1似乎不太可能,所以我倾向于2。 无论哪种方式,都需要进一步调查。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

是的,它是有效的。 sizeof运算符不会计算其操作数。