自定义malloc函数后出现段错误,其原因是什么?
自定义空malloc导致printf段错误的原因
问题场景
自定义了无实际逻辑的malloc函数,编译运行后调用printf出现段错误,怀疑是printf调用了malloc导致。
代码示例
#include <stddef.h> void *malloc(size_t s) { }; int main() { printf("lol"); }
编译命令
gcc -o l lol.c
错误原因分析
- 你的猜测是对的:GCC默认使用的GLIBC标准库中,
printf的实现确实会在某些路径下调用malloc——比如初始化输出缓冲区、管理内部状态结构时,需要动态分配内存。 - 你自定义的
malloc函数没有返回值(C语言中无return的非void函数行为未定义),实际会返回一个随机的无效指针。当printf拿到这个无效指针后,尝试对其进行读写操作,直接触发了段错误。 - 另外,代码未包含
<stdio.h>头文件,printf的隐式声明也会带来额外的未定义行为,但核心原因还是空malloc的无效返回值导致printf操作非法内存。
内容的提问来源于stack exchange,提问作者runningupthatroad
相关产品推荐
相关产品推荐

