【发布时间】:2019-04-06 09:57:10
【问题描述】:
我正在尝试编写一个获取指向指针数组的指针的代码。指针指向字符串,但它们每个都有 50 字节的内存分配给它们,所以我创建了这个函数来分配最小的内存量。但由于某种原因,realloc 会引发运行时错误(堆已损坏)。关于问题根源以及如何解决问题的任何想法?
int reallocToMinSize(char** friends, int len)
{
int i = 0;
int reallocSuccess = 1;
char* newFriendPtr = 0;
for (i = 0; i < len && reallocSuccess; i++)
{
printf("Reallocating: %s, size: %i", friends[i], (strlen(friends[i]) + 1));
friends[i] = (char*) realloc(friends[i], (strlen(friends[i]) + 1) * sizeof(char));
if (friends[i] == 0)
{
reallocSuccess = 0;
}
printf("%s\n", friends[i]);
}
return reallocSuccess;
}
【问题讨论】:
-
需要更多代码来重现问题。
-
is
printf("Reallocating: %s, size: %i", friends[i], (strlen(friends[i]) + 1));总是打印有效的东西? -
如果重新分配失败,并且你将 realloc 的返回值分配给 friends[i],那么你有一个空指针,你不应该在 printf 中使用它。
-
我怀疑您的
friends[i]初始值与 realloc 不兼容(我的回答中的第三种情况) -
这个诊断的臭名昭著的问题是它是在 代码损坏堆之后触发的。可能在一小时前发生。直到您使用 malloc/realloc 分配更多时您才会发现,只有这样运行时才需要遍历堆以找到更多空间并发现其内部结构受到损害。所以 sn-p 无法帮助我们帮助您,您必须专注于其余代码才能找到错误。
标签: c heap-memory