【问题标题】:Trouble with realloc重新分配问题
【发布时间】: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_tchar 的类型定义吗?因为如果不是,您分配的是nbDeletedLiterrals+1 字节,而不是nbDeletedLiterrals+1 文字。
  • @ryuzakinho:realloc(*delLit, 1) 分配了多少个lit_ts? (答案:零。它分配一个字节)。如果这是您代码中唯一的问题,那么它应该很容易修复。
  • @ryuzakinho 还是错了——这和nbDeletedLiterrals + (1 * sizeof(lit_t)) 一样,但是你想要(nbDeletedLiteralls + 1) * sizeof(lit_t)

标签: c realloc


【解决方案1】:

realloc(*delLit, 1) 分配了多少个lit_ts? (答案:零。它分配一个字节)。如果这是您的代码中唯一的问题,那么它应该很容易修复。 – immibis

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2011-08-13
    • 2018-09-04
    • 2010-11-21
    相关资源
    最近更新 更多