Why doesn't my program seg fault when I dereference a NULL pointer inside of malloc?

后端 未结 4 850
灰色年华
灰色年华 2020-12-03 18:28

I use this malloc style all the time

int *rc = 0;
rc = malloc(sizeof(*rc));

However, it doesn\'t seg fault even though when I call

4条回答
  •  一整个雨季
    2020-12-03 18:32

    You are not really dereferencing anything. The argument of sizeof is not evaluated, unless it is a VLA. It is explicitly allowed by the language to put whatever "garbage" you want as the argument of sizeof. The language guarantees that it will not evaluate anything, just perform compile-time analysis of the type of the expression. For example, expression sizeof i++ is guaranteed not to change the value of i.

    The only exception from that rule is Variable Length Arrays. The result of sizeof for VLAs is a run-time value, which means that the argument is evaluated and must be valid.

提交回复
热议问题