【发布时间】:2015-02-23 11:12:50
【问题描述】:
我在我的程序中使用了 realloc 函数,但它不能正常工作。
确实,在最后一次调用 realloc 期间,对 realloc 的调用在 3 次中有 2 次工作,我收到以下消息:“* `./sat' 中的错误:realloc():下一个大小无效:0x0000000000647520 * 中止(核心转储)”
这是我的代码中包含对 realloc 的调用的部分:
void insertInAssignedLitArray(int indiceVar, int indiceClause, int nbDeletedLiterrals, lit_t** delLit, clause_t* ptr, int signe, int nbClauseNonSat)
{
*delLit = (lit_t*)realloc(*delLit, nbDeletedLiterrals+1);
if (*delLit == NULL)
{
fprintf(stderr, "Erreur reallocation lors de la suppression du litteral\n");
exit(EXIT_FAILURE);
}
//some tasks.
}
我已经使用了一些 printfs 并且 nbDeletedLitterals 的值没问题。
这个函数在另一个函数中被调用,但我没有在其他任何地方使用 delLit。
提前致谢。
【问题讨论】:
-
没什么好说的了。
-
堆损坏很难调试。尝试在
valgrind中运行您的程序。 -
不过猜测...
lit_t是char的类型定义吗?因为如果不是,您分配的是nbDeletedLiterrals+1字节,而不是nbDeletedLiterrals+1文字。 -
@ryuzakinho:
realloc(*delLit, 1)分配了多少个lit_ts? (答案:零。它分配一个字节)。如果这是您代码中唯一的问题,那么它应该很容易修复。 -
@ryuzakinho 还是错了——这和
nbDeletedLiterrals + (1 * sizeof(lit_t))一样,但是你想要(nbDeletedLiteralls + 1) * sizeof(lit_t)