递归函数上的分割故障C
Segmentation fault on recursion function c++
i正在研究预购遍历二进制树算法。但是我遇到了细分故障: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;
}
您需要初始化节点的left
和right
成员变量为null指针。
无论如何,如果使用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());
}
问题的左,右右节点均未初始化为null。由于以前存储在该内存位置中的值,该程序在您的if(T!=nullptr)
语句中遇到非NULL值并执行IF块。
struct Node{
char val;
Node* left;
Node* right;
};
void preorder(Node *T){
if(T!=nullptr){
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->left->left = nullptr; //Initialize to NULL
p->left->right = nullptr; //Initialize to NULL
p->right = (Node *)malloc(sizeof(Node));
p->right->val = 'C';
p->right->left = nullptr; //Initialize to NULL
p->right->right = nullptr; //Initialize to NULL
preorder(T);
return 0;
}
相关文章:
- 分割故障C++矩阵
- C ,二进制树的高度,而不是检查我的子树是否为空,而是在检查我的子树是否是叶子节点.抛出分割故障
- 我正在为此代码分割故障
- 在执行strcpy时获取分割故障错误
- 空隙指针分割故障
- Xcode会产生分割故障,而不是例外
- OPENCV C 中的分割故障误差
- 分割故障:核心倾倒C 矢量对字符串:
- C 2D数组导致分割故障(核心倾倒)
- 分割故障/错误读数变量-C 列表
- DLSYM导致分割故障
- 使用C 中的操作员删除的分割故障
- 使用Linux X64下的Libmozjs-52(SpidermonKey)进行分割故障
- 使用长变量时分割故障(11)错误
- C - 返回字符串时的分割故障
- 创建VertexArray时的分割故障
- 向量分割故障的向量
- 从std :: fileSystem ::路径对象的类中退出时的分割故障
- C 矢量分割故障
- 基于向量的数据格式的分割故障误差