You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:40:49