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_ptrs nodes rather lpnodes. don't have do deletes, let alone chase down bugs due them. 1 of bugs using root after you've deleted it:

delete root; root=root->right; 

you need more like:

newroot = root->right; delete root; root = newroot; 

Comments

Popular posts from this blog

php - render data via PDO::FETCH_FUNC vs loop -

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

The canvas has been tainted by cross-origin data in chrome only -