c - Pop function linked list, glibc detected double free or corruption -
i recieving error when attempt run program:
* glibc detected * ./a.out: double free or corruption (fasttop): 0x0000000001926070 ***
i attempted create own pop function in c , giving me error above. i'm not sure went wrong.
struct node *pop(struct node *top, int *i) { struct node *new_node = top; int count = 0; if ( new_node == null) { return top; } while ( new_node != null && (count < 1)) { *i = new_node->value; free(new_node); new_node = new_node->next; count++; } return new_node; }
free(new_node); new_node = new_node->next;
you access objct after freed it. invokes undefined behaviour. once released, must not acce object.
instead use temporary pointer:
struct node *next = new_node->next; free(new_node); new_node = next;
that actual cause fault.
however, code far complicated:
- the
if ( new_node == null)
superfluous,aswhile
loop tests null pointer ,new_node
same valuetop
anyway. count
make loop interate @ once. don't need loop @ all.
see this:
struct node *pop(struct node *top, int *i) { if ( top != null) { struct node *next = top->next; *i = top->value; free(top); top = next; } return top; }
note better return pop
ed value , pass pointer pointer top
(struct node **top
). way can use result directly (presuming stack not empty, of course).
Comments
Post a Comment