我正在用 C 语言开发二叉搜索树。我在初始化多个节点时遇到问题。
typedef struct Node Node;
struct Node{
int* data;
Node* leftChild;
Node* rightChild;
Node* parent;
};
void initNode(Node* node, int* data){
node->data = data;
node->leftChild = NULL;
node->rightChild = NULL;
node->parent = NULL;
}
当仅调用一次 initNode() 时,上面的代码似乎工作正常。但是,如果我尝试进行第二次调用,则会出现段错误。
我的主要内容如下:
int main(){
Node* node;
Node* node2;
int a = 12;
int b = 15;
initNode(node, &a);
printf("%i \n", *node->data);
}
这有效。但是,如果我这样做:
int main(){
Node* node;
Node* node2;
int a = 12;
int b = 15;
initNode(node, &a);
initNode(node2, &b);
printf("%i \n", *node->data);
}
我遇到段错误。任何想法为什么会发生这种行为?
最佳答案
您尚未为节点或节点2 分配内存。由于两个指针都分配在堆栈上,因此它们将具有垃圾值。第一个程序通过完全是偶然。
关于c - 初始化多个节点时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32961147/