1
我正在C(Linux Debian,gcc版本4.9.2)中使用二叉樹,我在釋放由malloc分配的內存時遇到了一些麻煩。第一個deltree()工作正常,但第二個deltree()給我一個分段錯誤。可能是什麼原因?當釋放二叉樹遞歸時出現分段錯誤
#include <stdio.h>
#include <stdlib.h>
/*
compiling with flags -ansi -Wstrict-prototypes
*/
struct treenode{
struct treenode *left;
struct treenode *right;
int data;
};
typedef struct treenode node;
void deltree(node *tree);
int main(void){
node *root;
printf("First tree\n");
printf("===================\n");
root=(node *)malloc(sizeof(node));
root->data=5;
root->left=(node *)malloc(sizeof(node));
root->left->data=4;
root->right=(node *)malloc(sizeof(node));
root->right->data=6;
printf("Root node has data %d\n",root->data);
printf("Left child has data %d\n",root->left->data);
printf("Right child has data %d\n",root->right->data);
deltree(root); /* NO PROBLEM HERE */
printf("Second tree\n");
printf("===================\n");
root=(node *)malloc(sizeof(node));
root->data=-7;
root->left=(node *)malloc(sizeof(node));
root->left->data=-5;
root->right=(node *)malloc(sizeof(node));
root->right->data=-1;
printf("Root node has data %d\n",root->data);
printf("Left child has data %d\n",root->left->data);
printf("Right child has data %d\n",root->right->data);
deltree(root); /* SEGMENTATION FAULT HERE */
printf("Finished\n");
return(EXIT_SUCCESS);
}
void deltree(node *tree){
if(tree!=NULL){
deltree(tree->left);
deltree(tree->right);
printf(".\n");
free(tree);
}
}
另:除了root =(node *)malloc(sizeof(node));',建議'root = malloc(sizeof * root);'更容易編碼/維護,代碼錯誤的可能性更小。 – chux