#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;
}
Run Code Online (Sandbox Code Playgroud)
这实际上编译并没有错误执行,你甚至可以fwrite的内容*(int*)ptr,你会得到0x4A424F4B.但是,当您删除此行时:
FILE *wtf = fopen("wat", "wb");
Run Code Online (Sandbox Code Playgroud)
*(int*)ptr = 0x4A424F4B;会突然导致分段错误.为什么?