这是导致错误的大型代码片段:
Class TreeNode {
private:
int level;
TreeNode* parentNode;
public:
TreeNode() {
level = 0;
parentNode = NULL;
}
void setParent (TreeNode* n) {
parentNode = n; // <- this reassignment is causing segmentation fault
}
}
如何正确地重新指定指针变量parentNode
?
由于@galinette试图指出它,我可能从空指针调用了setParent
。但是,我事先以这种方式检查它:
if (candidateChild != NULL) {
candidateChild -> setParent(this); // <- I checked that both this and candidatChild are not NULL
}
答案 0 :(得分:3)
setParent
功能本身没有问题。但是你可能从指向TreeNode
的无效指针(例如null / uninitialized / deleted指针)调用它
您的代码有效,错误来自您未发布的其他部分。
答案 1 :(得分:-2)
您必须使用TreeNode** parentNode
作为私人字段,并使用*parentNode=&n
进行分配。