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

修改《Beginning C第五版》字符串排序代码触发realloc(): invalid next size错误

问题根因

你触发realloc(): invalid next size错误的核心原因是realloc调用参数错误:realloc第二个参数需要传入扩容后的总字节数,但你和书中原版代码都只传了指针数组的元素个数capacity,没有乘以单个指针的大小sizeof(char*)。

初始capacity为5,第一次calloc调用写法正确,分配了5个char*指针的空间,可正常存储前5个字符串。当存满5个字符串触发扩容时,capacity更新为6,此时realloc(pS, 6)仅分配了6字节的内存空间,而64位系统下单个char*指针就占8字节,写入第6个字符串的指针时直接越界破坏了堆内存的元数据结构,等到输入第7个字符串再次触发扩容时,realloc检测到堆结构损坏就抛出了错误,完全匹配你遇到的现象。

你将strnlen_s替换为strnlen、strcpy_s替换为strcpy的操作没有问题,只要输入的字符串长度不超过BUF_LEN-1,两个函数的行为在这里完全符合预期,不是错误诱因。

修复方法

仅需要修改realloc行的参数即可,将:

if(!(psTemp = realloc(pS, capacity))) return 1;

修改为:

if(!(psTemp = realloc(pS, capacity * sizeof(char*)))) return 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:57:02