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

LeetCode412代码中realloc为何修改变量x引发无限循环?

问题原因分析:realloc后变量x值异常变化

你的问题本质是内存越界引发的未定义行为,具体原因如下:

  • 当执行realloc(output, sizeof(char *) * x);时,如果之前的内存操作存在越界(比如向output指向的数组写入了超过分配大小的内容,或是每个char*指向的字符串内存分配不足导致写入越界),堆内存溢出会直接覆盖栈上局部变量x的存储区域。C语言中栈与堆在内存布局上通常相邻(堆向上增长、栈向下增长),堆内存越界后极易破坏栈上的局部变量值,这就是x从127变为124的核心原因。
  • 这种未定义行为没有固定表现,不同环境下可能出现程序崩溃、变量值乱改、无限循环等不同问题,你遇到的是x值被篡改后触发无限循环的情况。

验证与修复建议

  • 使用内存检测工具(如Valgrind)扫描代码,定位具体的内存越界位置,比如是否在给字符串分配内存时遗漏了终止符'\0'的空间,或是output数组的索引访问超出了当前分配的长度。
  • 确保每次调用realloc前,output指向的内存未被非法修改,且分配大小计算准确(比如sizeof(char *) * x要保证x是当前需要的数组元素个数,且未被之前的操作意外篡改)。

内容的提问来源于stack exchange,提问作者Jonas Dutra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:12:35