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