
Program received signal SIGSEGV,Segmentation fault. _int_malloc (av=0x7ffff7201740 <main_arena>,bytes=112) at malloc.c:3570 3570 malloc.c: No such file or directory.
使用回溯跟踪这个跟踪
#0 _int_malloc (av=0x7ffff7201740 <main_arena>,bytes=112) at malloc.c:3570#1 0x00007ffff6ecbfb5 in __GI___libc_malloc (bytes=112) at malloc.c:2924#2 0x0000000000401a99 in createTreeForQuad (quad=...) at cs257.c:217#3 0x0000000000401b3a in addQuadsToTree (tree=tree@entry=0x2f965c8) at cs257.c:230#4 0x0000000000401dec in addBody (tree=tree@entry=0x2f965c8,body=...) at cs257.c:292#5 0x0000000000402146 in addBodyToCorrectQuad (body=...,tree=tree@entry=0x2f961c8) at cs257.c:245#6 0x0000000000401eaf in addBody (tree=tree@entry=0x2f961c8,body=...) at cs257.c:296#7 0x0000000000402146 in addBodyToCorrectQuad (body=...,tree=tree@entry=0x2f95dc8) at cs257.c:245
注意addBody – > addBodyToCorrectQuad – > addBody递归在大量节点处发生了很多次. malloc失败的代码如下.
Tree *createTreeForQuad(Quad quad) {Tree *tree;tree = (Tree *)malloc(sizeof*tree);if (tree != NulL){ tree->quad = quad; tree->internal = 0; tree->bodyEmpty = 1; return tree;}else{ printf("\n ------------------------------------ MALLOC Failed----------------------------------------"); }} 我用来释放树的代码如下,它在根节点上调用,当树是叶子时内部标志设置为0.
voID cleanTree(Tree **tree) { if((*tree)->internal == 0) { free(*tree); } else{ cleanTree(&((*tree)->NE)); cleanTree(&((*tree)->SE)); cleanTree(&((*tree)->SW)); cleanTree(&((*tree)->NW)); cleanTree(&((*tree)->NE1)); cleanTree(&((*tree)->NW1)); cleanTree(&((*tree)->SE1)); cleanTree(&((*tree)->SW1)); free(*tree); }} 树结构看起来像这样
typedef struct Tree Tree;struct Tree { Body body; Quad quad; Tree *NE; Tree *NW; Tree *SE; Tree *SW; Tree *NE1; Tree *NW1; Tree *SE1; Tree *SW1; int internal; int bodyEmpty;}; 将Bodys添加到树中的代码如下,addBodyToCorrectQuad在正文所在的四边形上调用addBody.
voID addBody(Tree **tree,Body body) { if( (*tree)->bodyEmpty == 1) { (*tree)->body = body; (*tree)->bodyEmpty = 0; } else { if((*tree)->internal) { (*tree)->body = combineBody((*tree)->body,body); addBodyToCorrectQuad(body,tree); //printf("B\n"); } else{ (*tree)->internal = 1; / addQuadsToTree(tree); //printf("%f",((*tree)->NW)->quad.x); addBodyToCorrectQuad((*tree)->body,tree); (*tree)->body = combineBody((*tree)->body,tree); //printf("C\n"); } }}解决方法 在某处有堆损坏 – 有人在数组的末尾运行或取消引用无效指针或在释放后使用某个对象. 尝试使用valgrind或其他一些内存调试工具来缩小问题所在.
总结以上是内存溢出为你收集整理的malloc由_int_malloc导致分段错误全部内容,希望文章能够帮你解决malloc由_int_malloc导致分段错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)