我知道当你在C程序中做某些事情时,结果是不确定的.但是,编译器不应该生成无效(机器)代码,对吧?如果代码做错了,或者代码生成了段错误或其他什么,那将是合理的......
这应该是根据编译器规范发生的,还是编译器中的错误?
这是我正在使用的(简单)程序:
int main() {
char *ptr = 0;
*(ptr) = 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在编译-O3.那不应该生成无效的硬件指令,对吧?有了-O0,我在运行代码时遇到了段错误.这看起来更加明智.
编辑:它正在生成一条ud2指令......