我必须创建程序,该程序能够生成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个节点后这会失败。
我上传了整个源代码:下载 - 源代码
它很可能意味着您正在滥用以下分配的内存:
- 在分配内容开始之前写作(罕见)。
- 在分配的内容结束后写作(常见)。
- 释放以前没有分配的东西(罕见)。
- 释放后写入以前分配的空间(常见)。
您有valgrind
吗?如果是这样,请使用。如果没有,请获取并使用它。(它适用于许多类似Unix的系统; Windows Afaik不可用。)
您是否验证了cntedges是一个合理的价值,而不是某些非专业化(且数量很大)的值?