题目:
下列程序运行时会崩溃,请找出错误并改正,并且说明原因。
- #include <stdio.h>
- #include <malloc.h>
- typedef struct{
- TNode* left;
- TNode* right;
- int value;
- } TNode;
- TNode* root=NULL;
- void append(int N);
- int main(){
- append(63);
- append(45);
- append(32);
- append(77);
- append(96);
- append(21);
- append(17); // Again, 数字任意给出
- }
- void append(int N){
- TNode* NewNode=(TNode *)malloc(sizeof(TNode));
- NewNode->value=N;
- if(root==NULL){
- root=NewNode;
- return;
- }else{
- TNode* temp;
- temp=root;
- while((N>=temp.value && temp.left!=NULL) || (N<temp. value && temp.right!=NULL)){
- while(N>=temp.value && temp.left!=NULL)
- temp=temp.left;
- while(N<temp.value && temp.right!=NULL)
- temp=temp.right;
- }
- if(N>=temp.value)
- temp.left=NewNode;
- else
- temp.right=NewNode;
- return;
- }
- }
- #include <stdio.h>
- #include <malloc.h>
- typedef struct tagNode
- {
- struct tagNode *left;
- struct tagNode *right;
- int value;
- } TNode;
- TNode *root=NULL;
- void append(int N);
- int main(){
- append(63);
- append(45);
- append(32);
- append(77);
- append(96);
- append(21);
- append(17); // Again, 数字任意给出
- }
- void append(int N){
- TNode* NewNode=(TNode *)malloc(sizeof(TNode));
- NewNode->value=N;
- if(root==NULL){
- root=NewNode;
- return;
- }else{
- TNode* temp;
- temp=root;
- while((N>temp->value && temp->left!=NULL) || (N<temp->value && temp->right!=NULL)){
- while(N>=temp->value && temp->left!=NULL)
- temp=temp->left;
- while(N<temp->value && temp->right!=NULL)
- temp=temp->right;
- }
- if(N>=temp->value)
- temp->left=NewNode;
- else
- temp->right=NewNode;
- return;
- }
- }
编译环境:
gcc (GCC) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
运行过程:
[explover@Explover 20081101]$ gcc -g finderr.c -o finderr[explover@Explover 20081101]$ ./finderr
(本人水平有限,不足之处,请大家多多指正,谢谢!)