#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;
会突然导致分割错误为什么? 最佳答案
从技术上讲,您的代码有undefined behaviour。
它不会在使用特定编译器的特定平台上爆炸,因为未初始化的ptr
碰巧包含某些可写内存的地址因为我们不知道ptr
指的是什么,所以我们不知道作业有什么危害。
四处移动会改变地址,并且会“中断”(严格地说,它们一开始并没有真正工作)。
关于c - 分配未初始化的void *指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25236616/