我必须创建程序,它能够生成一个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 回答
这很可能意味着你滥用分配的内存:
在开始分配之前写(不常见) .
在您分配的内容结束后写(常见) .
释放以前未分配的东西(不常见) .
在释放之后写入先前分配的空间(常见) .
你有
valgrind
吗?如果是这样,请使用它 . 如果没有,请尽可能使用它 . (它可用于许多类Unix系统;它不适用于Windows AFAIK . )您是否验证过cntEdges是一个合理的值而不是一些未初始化(且数量非常大)的值?