c++ - how to deal with error:double free or corruption -
update: removenode code revised. no error, run, no output. output should printout vector in main function. still check bug now. lot help. if find anybug,please let me know. lot.
=======================
the error got *** glibc detected *** ./bintree: double free or corruption (fasttop): 0x0000000000727060 ***
the program simple following step:
- find min value of binary tree;
- record min value in vector;
- delete node min value in tree;
- repeat 1-3 till tree empty.
the tree defined following, language c++
typedef struct mynode* lpnode; typedef struct mynode node; struct mynode { double key; lpnode left; //left subtree lpnode right; //right subtree };
this simple delete node function, since each time smallest value deleted. node kind leaf, not complicated. comparedouble(double a,double b) return true
if a < b
;false
if a > b
//delete node void removenode(lpnode root,double min) { if(comparedouble(min,root->key)) { if(root->left != null) removenode(root->left,min); else printf("remove bug!\n"); }else{ //delete root; //root=root->right; lpnode tmp = makenewnode(root->key); tmp->left = root->left; tmp->right = root->right; delete root; root=tmp->right; } }
nmax initialed 0, sortedvector alloacted vector space large total nodes in tree, min initialed 99999. minvalue return min value of tree.
//call minvalue find min key //record min key in vector //call removenode delete node //repeat till tree empty void problem1(lpnode root,double* sortedvector,int& nmax) { double min = max; while(root!=null) { sortedvector[nmax] = minvalue(root,min) ; nmax++; removenode(root,min); } printf("the tree empty"); }
you'd better of using std::unique_ptr
s nodes rather lpnode
s. don't have do delete
s, let alone chase down bugs due them. 1 of bugs using root
after you've delete
d it:
delete root; root=root->right;
you need more like:
newroot = root->right; delete root; root = newroot;
Comments
Post a Comment