c - 节点值在 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;
}
解决方案
这个说法有错别字
X=(BST)malloc(sizeof(BST));
^^^
那就是 malloc 的调用为指向节点的指针分配内存,而不是为节点本身分配内存。
必须有
X=(BST)malloc(sizeof( *X));
或者
X=(BST)malloc(sizeof( struct node ));
由于拼写错误,程序具有未定义的行为。
推荐阅读
- python - 如何仅操作属于 Pandas DataFrame 中对象列表的某些元素
- ruby-on-rails - 检查 RSpec 中仅在创建时运行的自定义验证
- excel - 识别模式并提取子字符串
- python - mpl_to_plotly 没有显示预期的图例
- magento - 如何在 Magento 中导出类别描述
- drupal - drupal8:如何安装模块?
- react-native - 如何在 React Navigation V5 中为每次启动启动启动画面?
- excel - 格式化单元格以根据行号引用另一个工作表
- angular - 当 auth Guard 发送用户登录或注册时,Angular 9 和 Ionic 重定向到上一页
- django - Django 3 设置 django_language cookie