user-0 提问: 内存错误

回复:
user: user-1
content: while(temp)         {             if(key < temp->data)             {                 temp = temp->lchild;                 if(!temp)                 {                     temp->lchild = p;                 }             }             else             {                 temp = temp->rchild;                 if(!temp)    //问题出在这个地方，因为temp已经为NULL了，然后再操作temp->rchild = p;就会导致段错误；同理上面的操作                 {                     temp->rchild = p;                 }             }         } 对NULL指针操作->rchild或->lchild都会导致段错误；建议重新梳理一下逻辑。

user: user-1
content: 引用 4 楼 qq_37171619 的回复:[quote=引用 3 楼 cfjtaishan 的回复:]  while(temp)         {             if(key < temp->data)             {                 temp = temp->lchild;                 if(!temp)                 {                     temp->lchild = p;                 }             }             else             {                 temp = temp->rchild;                 if(!temp)    //问题出在这个地方，因为temp已经为NULL了，然后再操作temp->rchild = p;就会导致段错误；同理上面的操作                 {                     temp->rchild = p;                 }             }         } 对NULL指针操作->rchild或->lchild都会导致段错误；建议重新梳理一下逻辑。 这是个问题，主要我调试的时候，提示creat()函数中用的bt 0xcccccccc[/quote] 还有一个问题就是你的creat函数中的指针不是指向NULL。 void insert(btree **bt, int key) {     if(search(*bt, key) == 1)     {         node *p = (node *)malloc(sizeof(node));         p->data = key;         p->lchild = p->rchild = NULL;         if(*bt == NULL)         {             *bt = p;             printf("helloworld\n");             return;         }         node *temp = *bt;//定义游标         while(temp)         {             if(key < temp->data)             {                 temp = temp->lchild;                 if(!temp)                 {                     temp->lchild = p;                 }             }             else             {                 temp = temp->rchild;                 if(!temp->rchild)                 {                     temp->rchild = p;                 }             }         }     } }  void creat(btree **bt, int a[], int n) {     int i;      *bt = NULL;     for(i=0; i<n; i++)         insert(bt, a[i]); }  void MidOrderTraverse(btree *bt) {     node *p = bt;     if(p)     {         MidOrderTraverse(p->lchild);         printf("%d ", p->data);         MidOrderTraverse(p->rchild);     } }  //#include "BST.H"  //void main() int main() {     btree *bt = NULL;     int a[5] = {1, 3, 2, 4, 5};     creat(&bt, a, 5);     MidOrderTraverse(bt);      return 0; }

user: user-0
content: 引用 3 楼 cfjtaishan 的回复: while(temp)         {             if(key < temp->data)             {                 temp = temp->lchild;                 if(!temp)                 {                     temp->lchild = p;                 }             }             else             {                 temp = temp->rchild;                 if(!temp)    //问题出在这个地方，因为temp已经为NULL了，然后再操作temp->rchild = p;就会导致段错误；同理上面的操作                 {                     temp->rchild = p;                 }             }         } 对NULL指针操作->rchild或->lchild都会导致段错误；建议重新梳理一下逻辑。 这是个问题，主要我调试的时候，提示creat()函数中用的bt 0xcccccccc

user: user-0
content: 引用 1 楼 user-2 的回复:你这个程序是要干什么的呀，能所具体点吗？？ 就是二叉排序树

user: user-2
content: 你这个程序是要干什么的呀，能所具体点吗？？