malloc由_int_malloc导致分段错误

malloc由_int_malloc导致分段错误,第1张

概述我有一个树结构,我也添加了大量的节点.执行此 *** 作的次数(在运行之间清除树)和节点数作为命令行参数给出.对于节点数大致< 6000和程序按预期执行的任意数量的运行.但是,当节点数超过此数并且运行次数超过50左右时,程序会导致分段错误. Program received signal SIGSEGV, Segmentation fault. _int_malloc (av=0x7ffff720 我有一个树结构,我也添加了大量的节点.执行此 *** 作的次数(在运行之间清除树)和节点数作为命令行参数给出.对于节点数大致< 6000和程序按预期执行的任意数量的运行.但是,当节点数超过此数并且运行次数超过50左右时,程序会导致分段错误.

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导致分段错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1230816.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存