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

C语言操作字符串时realloc函数返回空指针原因问询

realloc调用差异问题解答

首先明确核心规则:C标准中明确规定,realloc函数的第一个参数只能是以下两种情况之一:

  • 空指针NULL
  • 之前通过malloc、calloc、realloc动态分配在堆区的内存指针

传入除此之外的任何指针都会触发未定义行为,大概率出现分配失败、程序崩溃等问题。

接下来对应你的两段代码分别分析:

char *s="hello";
s=realloc(s,size); // this return null

这里的s指向的是字符串字面量"hello",这类字符串常量是被编译器存储在进程的只读数据段的,不属于堆区动态分配的内存,完全不满足realloc的入参要求,因此调用失败返回NULL是非常典型的表现。

char *p;
p=malloc(5);
strcpy(p,"hello");
p=realloc(p,size) // this works fine

这里的p是通过malloc申请的堆区内存,符合realloc的入参规则,因此可以正常执行内存重分配操作。

补充开发规范提示:

  1. 不要尝试修改字符串字面量的内容,也不要将指向字符串字面量的指针传入free、realloc这类堆内存操作函数,都会触发未定义行为。
  2. 使用realloc时建议先用临时指针接收返回值,确认分配成功后再赋值给原指针,避免分配失败返回NULL直接覆盖原指针,导致原内存泄漏无法释放。

内容的提问来源于stack exchange,提问作者Rafik Bouloudene

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:45:01