小编m13*_*132的帖子

分配uninitilialized void*指针

#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;会突然导致分段错误.为什么?

c gcc glibc

1
推荐指数
1
解决办法
100
查看次数

标签 统计

c ×1

gcc ×1

glibc ×1