使用大量节点后,malloc失败

时间:2012-10-23 17:48:20

标签: 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个节点,我就会得到以下输出:

  

graph:malloc.c:2451:sYSMALLOc:断言`(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个节点后,我无法理解为什么会失败。

我上传了整个源代码:Download - Source code

2 个答案:

答案 0 :(得分:0)

这很可能意味着您滥用由以下内容分配的内存:

  1. 在开始分配之前写作(不常见)。
  2. 在你分配的内容结束后写作(常见)。
  3. 释放之前未分配的内容(不常见)。
  4. 在释放之后写入先前分配的空间(常见)。
  5. 你有valgrind吗?如果是这样,请使用它。如果没有,请尽可能使用它。 (它可用于许多类Unix系统;它不适用于Windows AFAIK。)

答案 1 :(得分:0)

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