【发布时间】:2019-08-13 02:54:03
【问题描述】:
我正在研究预购遍历二叉树算法。但是我遇到了 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;
}
【问题讨论】:
-
malloc 不会为您清零内存。这意味着,
Nodemalloc-ed 可能左右非 NULL,因此您的preorder()将错误地遍历到无效的内存位置。当您使用 C++ 时,为什么不为您的类编写一个构造函数并使用new,而不是使用malloc? -
两个答案都指出了原因。以后可以在这里进行自我诊断:segfault.stensal.com/a/e4e7lMyfNQ62slZH
标签: c++ pointers recursion binary-tree