Cal*_*orm 8 c segmentation-fault
我一直使用这种malloc风格
int *rc = 0;
rc = malloc(sizeof(*rc));
Run Code Online (Sandbox Code Playgroud)
然而,这并不赛格故障,即使当我打电话sizeof(*rc)我认为rc==0,而且我解引用NULL指针.
AnT*_*AnT 21
你并没有真正取消引用任何东西.sizeof除非它是VLA,否则不会评估参数.语言明确允许将您想要的任何"垃圾"作为参数sizeof.该语言保证它不会评估任何内容,只需对表达式的类型执行编译时分析.例如,表达式sizeof i++保证不会更改值i.
该规则唯一的例外是可变长度数组.sizeofVLA 的结果是运行时值,这意味着参数被评估并且必须有效.
该sizeof运营商实际上并没有评估它的操作数,它只查看它的类型.类型*rc是int,所以它相当于sizeof (int).这一切都发生在编译时.
(另外,这不是"malloc内部".)