0

在这里,我试图从给定的后缀表达式创建一棵树。当我尝试执行第一个 printf 语句时,它成功执行,而第二个没有,程序就挂断了。

  mynode *create_tree(char postfix[])
  {
      char symbol;
      int i,k;
      mynode *temp,*stack[100];
      for(i=k=0;(symbol=postfix[i])!='\0';i++)
      {
          temp=(mynode *)malloc(sizeof(mynode));
          temp->data=symbol;
          temp->left=NULL;
          temp->right=NULL;
          //printf("%c",temp->data);
          if(isalnum(symbol))
          {
             stack[k++]=symbol;
          }
          else
          {
              temp->right=stack[--k];
              temp->left=stack[--k];
              //printf("%c %c\n",temp->left->data,temp->right->data);
              stack[k++]=temp;
          }
      }
      return stack[--k];
   }
4

1 回答 1

2

您有一个本地mynode指针数组,存储在stack

mynode *temp,*stack[100];

这些都是未初始化的。

您分配temp->righttemp->left每个未初始化mynode *的,

          temp->right=stack[--k];
          temp->left=stack[--k];

然后您尝试取消引用未初始化的指针以获取data元素。

          //printf("%c %c\n",temp->left->data,temp->right->data);

这就是你的代码死亡的原因。

于 2013-06-07T19:14:15.107 回答