gpt4 book ai didi

c++ - 调用基类变量的段错误

转载 作者:行者123 更新时间:2023-12-02 10:12:29 26 4
gpt4 key购买 nike

我已经在一个项目中使用这段代码很长时间了。不过,我最近加了llvm-config --cxxflags --libs到编译器以便与 llvm 库链接,它开始生成段错误。我找到了错误,它发生在我调用基类的变量时。
这是我在做什么的一个小例子
在 Literals.hh

class LiteralObj : public RuleObj {

public:

LiteralObj();
LiteralObj(char *str);
~LiteralObj();
std::string raw_value;

static int literalobj_cnt;
int literalobj_id;
};

class LiteralIntObj : public LiteralObj{

public:

LiteralIntObj();
LiteralIntObj(char *str);
~LiteralIntObj();

void graphVis(std::ofstream &ofs, std::string &srcRef);

CODE_GENERATION;

int value;
};
文字.cc
LiteralObj::LiteralObj() : RuleObj(){
ENTER_STATEMENT

raw_value = "";

literalobj_id = literalobj_cnt;
literalobj_cnt++;

}

LiteralObj::LiteralObj(char *str) : RuleObj(){
ENTER_STATEMENT
std::cerr << ruleobj_id << "\n";
raw_value = str;
literalobj_id = literalobj_cnt;
literalobj_cnt++;
}

LiteralObj::~LiteralObj()
{
ENTER_STATEMENT;
}

LiteralIntObj::LiteralIntObj() : LiteralObj()
{
ENTER_STATEMENT;
value = 0;
}
LiteralIntObj::LiteralIntObj(char *str) : LiteralObj(str)
{

ENTER_STATEMENT;
std::cerr << ruleobj_id << '\n';
value = stoi(raw_value);
}

LiteralIntObj::~LiteralIntObj()
{
ENTER_STATEMENT;
}

void LiteralIntObj::graphVis(std::ofstream &ofs, std::string &srcRef) {
ENTER_GRAPHVIS;

// -- define names
std::string currRef = "LiteralIntObj";
std::string name = "LiteralInt";

std::cerr << raw_value << "\n";
//it crashes here with SEGFAULT.

}
代码打印出第一个对象的基类的 raw_value 很好,但是,当第二个被调用时,会生成 SEGMENTATION 错误。

最佳答案

当我更改编译选项时,指针默认设置为 0xfffffff 而不是 0。因此检查 if (pointer)即使未初始化导致调用函数 graphViz() 的指针也生成 true .

关于c++ - 调用基类变量的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62993060/

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