gpt4 book ai didi

c++ - 递归函数c++的段错误

转载 作者:行者123 更新时间:2023-11-28 01:22:53 25 4
gpt4 key购买 nike

我正在研究预序遍历二叉树算法。但是我遇到了 Segmentation fault:11 错误。代码如下所示。

我想知道为什么会出现这个错误。顺便说一句,我试过非递归算法preorder(),还是会出现段错误。

环境:macOS,clang-800.0.38

struct Node{
char val;
Node* left;
Node* right;
};

void preorder(Node *T){
if(T!=NULL){
cout << T->val;
preorder(T->left);
preorder(T->right);
}
}

int main(){
Node *T = (Node *)malloc(sizeof(Node));
Node *p = T;
p->val = 'A';
p->left = (Node *)malloc(sizeof(Node));
p->left->val = 'B';
p->right = (Node *)malloc(sizeof(Node));
p->right->val = 'C';
preorder(T);
return 0;
}

最佳答案

您需要将节点的leftright 成员变量初始化为空指针。


无论如何,如果您使用 C++,请使用 C++ 而不是 C 构造。这是您的代码的示例 C++14 版本:

#include <iostream>
#include <memory>

struct Node{
Node(char a) : val(a) { };
char val;
std::unique_ptr<Node> left, right;
};

void preorder(Node* p) {
if (p) {
std::cout << p->val;
preorder(p->left.get());
preorder(p->right.get());
}
}

int main() {
auto root = std::make_unique<Node>('A');
root->left = std::make_unique<Node>('B');
root->right = std::make_unique<Node>('C');

preorder(root.get());
}

关于c++ - 递归函数c++的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55294203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com