我正在为我正在处理的解析器创建AST,但是在调用getRoot()时出现了分段错误,似乎无法弄清原因。我半确定这是显而易见的,但是凝视了很长时间的代码后,我一无所获。
试图研究这个问题,我发现我可能会弄乱堆栈,但看不到如何。
当我运行以下代码时,就会发生分段错误:
AST ast;
ast.getRoot();
.cpp文件:
#include "AST.h"
Compiler::AST::AST() {
}
void Compiler::AST::addNode(Node node) {
if(rootNull){
setRoot(node);
rootNull = false;
}else{
root.childNodes.push_back(node);
}
}
Compiler::AST::Node Compiler::AST::getRoot() {
return root;
}
void Compiler::AST::setRoot(Compiler::AST::Node node) {
this->root = node;
}
.h文件:
#ifndef COMPILERS_ASSIGNMENT_AST_H
#define COMPILERS_ASSIGNMENT_AST_H
#include <string>
#include <vector>
#include <iostream>
namespace Compiler {
class AST {
public:
struct Node{
std::string descriptor;
std::vector <Node> childNodes;
};
typedef Node Node;
AST();
void addNode(Node);
Node getRoot();
private:
Node root;
bool rootNull = true;
void setRoot(Node);
};
}
#endif //COMPILERS_ASSIGNMENT_AST_H