Aar*_*aid 9 c initialization undefined-behavior language-lawyer
根据这个reddit注释线程,如果在写入之前尝试读取内存,则它是未定义的.我指的是已经成功编写的普通堆内存malloc.
...请注意,这不是严格有效的C:允许编译器/运行时系统使用所谓的陷阱表示来初始化未初始化的内存,这会导致访问时出现未定义的行为.
我觉得很难相信.有标准报价吗?
当然,据我所知,无法保证内存已被清零.这个未初始化的存储器中的值基本上是伪随机的或任意的.但我真的不相信标准会将此称为未定义的行为(从某种意义上说它可能是段错误,或者删除所有文件,或者其他什么).其余的reddit线程在这个问题上没有任何更多的亮点.
oua*_*uah 11
如果通过a访问char*,则定义.但除此之外,这是未定义的行为.
(C99,7.20.3.3)"malloc函数为一个对象分配空间,该对象的大小由大小指定,其值是不确定的."
在不确定的价值:
(C99,3.17.2p1)"不确定值:未指定的值或陷阱表示"
在陷阱表示中通过非字符类型读取未定义的行为:
(C99,6.2.6.1p5)"某些对象表示不需要表示对象类型的值.如果对象的存储值具有这样的表示,并且由不具有字符类型的左值表达式读取,则行为为未定义.[...]这种表示称为陷阱表示."