【问题标题】:realloc: invalid next size, detected by glibc [duplicate]realloc:下一个大小无效,由 glibc 检测到 [重复]
【发布时间】:2013-03-29 13:32:54
【问题描述】:

我的代码:

int args_size = 5; 字符** 参数; args = (char**) malloc(sizeof(char*) * args_size); // ... args = (char**) realloc(args, sizeof(char*) * (args_size += 5));

我想将大小增加 5。

但我收到此错误:

*** 检测到 glibc *** ./a.out: realloc(): 无效的下一个大小:0x0000000000a971c0 ***

我知道捕获 realloc 的临时变量很好,但只是为了简单...

【问题讨论】:

  • macro->args 是什么?
  • 问题可能在mallocrealloc 之间。
  • glibc 奇怪地检测到的地址看起来好像你的地址的高位字已经冲突了。当您在忘记包含 malloc 的原型后尝试静默编译器时,这是在具有 32 位 int 和 64 位指针的机器上强制转换 malloc 的典型“副作用”。
  • 在您方便遗漏的代码中,args 是否曾经被修改过(不是*argsargs)?例如,args++
  • 我的建议是从原始malloc() 保存到args 直到您看到args 中存储的值发生变化为止,在调试器中逐步执行该函数。那条指令是在戳你的眼睛。如果您知道如何使用 gdb 设置写入时中断数据断点,那就更好了,但如果不知道,请保持简单并逐步执行代码。并注意这里的其他人所说的话。 1. #include <stdlib.h>,2. 不要在 C 中强制转换 malloc/realloc 调用,3. 至少使用 -Wall -Werror注意来自编译器的警告。

标签: c size realloc dynamic-arrays


【解决方案1】:

已解决

最初,args 的大小是 5 个元素。 程序在填充args时,错误地添加了第6个元素,然后调用了realloc

这导致了问题中提到的错误。

问题是通过消除错误来解决的,通过跟随 WhozCraig、Jens Gustedt 和其他人的 cmets...

谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2014-06-28
    • 2012-02-02
    • 2011-06-26
    • 2011-02-25
    • 2012-10-31
    相关资源
    最近更新 更多