1

我必须创建能够生成 GML 文件的程序。

为此我实现了一个函数GetEdges,这个函数应该返回三个数组(通过引用调用)。

该函数的签名如下所示:

bool GetEdges(DG_NODE_ID **sourceIds, DG_NODE_ID **destIds, int **weights, int *count)

在我想分配空间的函数中:

*sourceIds = (DG_NODE_ID *) malloc(cntEdges * sizeof (DG_NODE_ID));

一旦我使用 4 个节点,我就会得到以下输出:

图:malloc.c:2451: sSYSMALLOc: 断言`(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size)

= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1)) ) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' 失败。

我尝试了所有方法,但我不知道为什么在使用 4 个节点后会失败。

我上传了整个源代码:下载 - 源代码

4

2 回答 2

0

这很可能意味着您正在滥用由以下人员分配的内存:

  1. 在您分配的内容开始之前编写(不常见)。
  2. 写完你分配的东西(常见)。
  3. 释放以前未分配的东西(不常见)。
  4. 释放后写入先前分配的空间(常见)。

你有valgrind吗?如果是这样,请使用它。如果没有,请尽可能获取并使用它。(它可用于许多类 Unix 系统;它不适用于 Windows AFAIK。)

于 2012-10-23T17:53:24.620 回答
0

您是否验证过 cntEdges 是一个合理的值,而不是一些未初始化的(和非常大的数字)值?

于 2012-10-23T17:54:16.237 回答