首页 文章

使用大量节点后,malloc失败

提问于
浏览
1

我必须创建程序,它能够生成一个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

    这很可能意味着你滥用分配的内存:

    • 在开始分配之前写(不常见) .

    • 在您分配的内容结束后写(常见) .

    • 释放以前未分配的东西(不常见) .

    • 在释放之后写入先前分配的空间(常见) .

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

  • 0

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

相关问题