包含多个整数的结构会产生运行时错误

时间:2014-07-29 07:52:26

标签: c structure binary-tree binary-search-tree

代码包含二叉搜索树的结构。当我从bstNode结构中删除元素 - checkLeft或checkRight或者不在createTree方法中的这些变量中存储任何值时,它可以正常工作

我想在所有三个变量数据中存储值,checkLeft和checkRight。怎么解决这个问题。代码可以在http://ideone.com/geIfLk

找到
 #include <stdio.h>

 struct bstNode
 {
     int data;
     struct bstNode *right, *left;
     int checkLeft, checkRight;
 };

 void addBSTNode(struct bstNode *temp, struct bstNode **root)
 {
     if(*root == NULL)
     {
         *root = temp;
         return;
     }

     struct bstNode *current = *root;
     while(1)
     {
         if(temp->data > current->data && current->right != NULL)
             current = current->right;
         else if(temp->data < current->data && current->left != NULL)
             current = current->left;
         else
             break;
     }

     if(temp->data > current->data)
         current->right = temp;
     else
         current->left = temp;

 }

 struct bstNode* createTree(int dataArray[], int size)
 {
     struct bstNode *temp, *root = NULL;
     int count = 0;
     while(count < size)
     {
         temp = (struct bstNode*) malloc(sizeof(struct bstNode*));
         temp->data = dataArray[count++];
         temp->checkLeft = 0;
         temp->checkRight = 0;
         temp->right = NULL;
         temp->left = NULL;
         addBSTNode(temp, &root);
     }

     return root;
 }

 int main(void) 
 {

     int dataArray[] = {4,1,3,2,5,8,7,6,9};
     struct bstNode *root = createTree(dataArray, 9);

     return 0;
 }

2 个答案:

答案 0 :(得分:2)

在你的行

 temp = (struct bstNode*) malloc(sizeof(struct bstNode*));

为bstNode指针而不是整个struct分配内存。你想要的是分配整个结构,malloc(sizeof(struct bstNode));这也解释了当你删除结构的一些成员时它的工作原理。在某些时候,bstNodebstNode*的大小相同,或者至少不会导致立即错误。

有关已编辑的示例,请参阅here

答案 1 :(得分:0)

addBSTNode如果tmp->data既不高于current->data又低于NULL且左右指针都不是while,会发生什么?

执行流程离开if循环并到达第二系列if语句,这将在那里选择第二个tmptemp->data < current->data将覆盖左侧指针,即使已经存在某些东西。

一个简单的解决方法是将temp->data <= current->data替换为{{1}},以便在断开while循环之前搜索将有效地到达一个叶子。