C -Malloc使用大量节点后失败

  • 本文关键字:节点 失败 -Malloc c malloc
  • 更新时间 :
  • 英文 :


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

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

该功能的签名看起来像:

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

在函数中我想malloc空间:

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

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

图:malloc.c:2451:sysmalloc:断言`(old_top ==(((((mbinptr))) ((((char *)&((av) -> bin [(((1) - 1) * 2])) - __ builtin_offsetof(struct) malloc_chunk,fd)))&&old_size == 0)||((无符号长)(old_size)

=(unsigned long)((((((((__ hindin_offsetof),struct malloc_chunk,fd_nextsize)) ((2 *(sizeof(size_t)) - 1) - 1)))&〜(2 *(sizeof(size_t))) -1)))&&(((old_top) -> size& 0x1)&&((无符号长)old_end& pagemask)== 0)'失败。

我尝试了一切,我不知道为什么在使用4个节点后这会失败。

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

它很可能意味着您正在滥用以下分配的内存:

  1. 在分配内容开始之前写作(罕见)。
  2. 在分配的内容结束后写作(常见)。
  3. 释放以前没有分配的东西(罕见)。
  4. 释放后写入以前分配的空间(常见)。

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

您是否验证了cntedges是一个合理的价值,而不是某些非专业化(且数量很大)的值?

相关内容

  • 没有找到相关文章

最新更新