c - Malloc error while inserting an element in a red black tree -


#include<stdio.h> #include<stdlib.h> typedef struct treenode{     int elem;     int color;     struct treenode *left,*right,*parent; }treenode_t; treenode_t *create_node(int elem){     treenode_t *newnode=(treenode_t *)malloc(sizeof(treenode_t *));     newnode->elem=elem;     newnode->left=null;     newnode->right=null;     newnode->color=0;     newnode->parent=null;     return newnode; } void insert(treenode_t **node,int elem){     if(*node==null){         *node=create_node(elem);     }else{         treenode_t *store_parent;         treenode_t *ptr;         ptr=*node;         while(ptr!=null){             store_parent=ptr;             if(elem<ptr->elem){                 if(ptr->left==null){                     ptr->left=create_node(elem);                     (ptr->left)->parent=store_parent;                     (ptr->left)->color=1;                 }                 ptr=ptr->left;             }             else if(elem>ptr->elem){                 if(ptr->right==null){                 ptr->right=create_node(elem);                 (ptr->right)->parent=store_parent;                 (ptr->right)->color=1;                 }                 ptr=ptr->right;             }         }     } } void print_tree(treenode_t *node){     if(node==null)         return;     print_tree(node->left);     printf("%d\n",node->elem);     print_tree(node->right); } void main(){     treenode_t *root=null;     insert(&root,10);     insert(&root,5);     insert(&root,14);     print_tree(root); } 

i able insert first element second time malloc fails.

using gdb: when use gdb found once have created first node(the root of tree), when go insert second element i.e. 5 line ptr->left=create_node(elem) redirects function create_node().the address allocated malloc same stored in root results in error.

i following error:

a.out: malloc.c:2372: sysmalloc: assertion `(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)' failed.

program received signal sigabrt, aborted. 0x00007ffff7a4af79 in __gi_raise (sig=sig@entry=6) @ ../nptl/sysdeps/unix/sysv/linux/raise.c:56 56 ../nptl/sysdeps/unix/sysv/linux/raise.c: no such file or directory.

now have change address of memory allocated malloc(if so,how?) or there other problem in code?

i think problem parameter you’re using call malloc with:

treenode_t *newnode=(treenode_t *)malloc(sizeof(treenode_t *)); 

you’re asking memory, don’t think you’re asking enough. sizeof(treenode_t *) returns size of pointer treenode_t; need enough space entire struct. try using sizeof(treenode_t) instead , see if helps.


Comments

Popular posts from this blog

routing - AngularJS State management ->load multiple states in one page -

python - GRASS parser() error -

json - Gson().fromJson(jsonResult, Myobject.class) return values in 0's -