大佬教程收集整理的这篇文章主要介绍了malloc由_int_malloc导致分段错误,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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"); } } }
以上是大佬教程为你收集整理的malloc由_int_malloc导致分段错误全部内容,希望文章能够帮你解决malloc由_int_malloc导致分段错误所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。