首页 > 解决方案 > 节点值在 C 中自动更改

问题描述

我正在为二叉搜索树创建一个程序,这是我正在使用的一个函数。从输出中可以看出, 的值 root->rightChild由于未知原因而发生变化,程序结束时没有显示任何错误。

typedef struct node * BST;
struct node
{
  struct node *leftChild;
  int data;
  struct node *rightChild;
};
BST temp=NULL, ptr=NULL, root=NULL, prev=NULL;
BST newNode()
{
  BST X;
  X=(BST)malloc(sizeof(BST));
  X->leftChild=X->rightChild=NULL;
  return X;
}

void createBST(int elem)
{
  temp=newNode();
  temp->data=elem;
  if(!root)
  {
    root=temp;
    printf("\nroot-?rightChild= %p",root->rightChild);
    printf("\nroot-?leftChild= %p",root->leftChild);
  }
  else
  {
    printf("\nroot-?rightChild= %p",root->rightChild);
    printf("\nroot-?leftChild= %p",root->leftChild);
    prev=NULL;
    ptr=root;
    while(ptr!=NULL)
    {
      prev=ptr;
      ptr=(ptr->data<temp->data)?ptr->rightChild:ptr->leftChild;
    }
    if(prev->data<temp->data)
      prev->rightChild=temp;
    else
      prev->leftChild=temp;
  }
}
int main()
{
  int choice;
  while(1)
  {
    printf("\nPick a Binary Search Tree operation\n1) Create a Binary Search Tree\n2) Traverse the Binary Search Tree\n3) Seach for a KEY element in the Binary Search Tree\n4) Exit\n>| ");
    scanf("%d",&choice);
    switch(choice)
    {
      case 1:
      {
        int num,elem;
        printf("\nEnter the number of elements to be inserted into the Binary Search Tree: ");
        scanf("%d",&num);
        printf("\nEnter the elements to be inserted into the Binary Search Tree: ");
        for(int i=1;i<=num;i++)
        {
          scanf("%d",&elem);
          createBST(elem);
        }
      }
      break;
      case 2:
        traverBST();
      break;
      case 3:
        searchBST();
      break;
      case 4:
        exitProgram();
      break;
      default:
        printf("\nInvalid Choice\n");
      }
    }
    return 0;
}

这是代码的输出: 在此处输入图像描述

标签: cstructbinary-search-treedynamic-memory-allocation

解决方案


这个说法有错别字

X=(BST)malloc(sizeof(BST));
                     ^^^

那就是 malloc 的调用为指向节点的指针分配内存,而不是为节点本身分配内存。

必须有

X=(BST)malloc(sizeof( *X));

或者

X=(BST)malloc(sizeof( struct node ));

由于拼写错误,程序具有未定义的行为。


推荐阅读