c - 初始化多个节点时出现段错误

标签 c initialization malloc binary-search-tree

我正在用 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/

相关文章:

似乎无法找到数组中最大的 float ,使用内联汇编

javascript - Node.js 在加载其他函数之前等待初始化变量

c++ - 如何初始化包含opencv :matrices?的二维 vector

c - 在 C 的 switch case 中初始化

c - 将堆栈变量分配给循环内的 malloc 内存会更改链表中的数据

c - 声明不同单词的数组

c - Linux 内核行规程 copy_from_user

C 悬空指针问题

C、gets() 可能很危险。文件中的数据不会出现

c - 如果请求的内存空间很大,Malloc 是否只使用堆?