【发布时间】:2014-08-11 05:53:13
【问题描述】:
#include <stdio.h>
void wat(void *ptr){
*(int*)ptr = 0x4A424F4B;
return;
}
int main(int argc, char **argv){
FILE *wtf = fopen("wat", "wb");
void *ptr;
wat(ptr);
return 0;
}
这实际上编译和执行没有错误,你甚至可以fwrite*(int*)ptr的内容,你会得到0x4A424F4B。但是,当您删除此行时:
FILE *wtf = fopen("wat", "wb");
*(int*)ptr = 0x4A424F4B; 会突然导致分段错误。为什么?
【问题讨论】:
-
此程序将导致未定义的行为。除非您将有效地址传递给函数 wat,否则您不能期望正确的结果