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
Post a Comment