C++ 可以编写不';无法执行导致分段错误的命令?

C++ 可以编写不';无法执行导致分段错误的命令?,c++,C++,我有这段代码工作得很好。中的语句if为true,这导致我打印true。但是,当我删除else语句的内容时,这会导致分段错误,即使它没有执行(仍然打印TRUE) 有人知道为什么会这样吗 if(parser->checkToken(Token::Type::Int)) { std::cout << "TRUE" << std::endl; parser->scanner->getToken().getNumber();

我有这段代码工作得很好。
中的语句if
为true,这导致我打印
true
。但是,当我删除
else
语句的内容时,这会导致分段错误,即使它没有执行(仍然打印
TRUE

有人知道为什么会这样吗

if(parser->checkToken(Token::Type::Int)) {
        std::cout << "TRUE" << std::endl;
        parser->scanner->getToken().getNumber();
        parser->advance();
} else {
        std::cout << "FALSE" << std::endl;
        parser->requireToken(Token::Type::String);
}
if(解析器->检查令牌(令牌::类型::Int)){
std::cout getToken().getNumber();
解析器->高级();
}否则{
std::cout当然可以

加/减代码,以及相关数据,将内存中的内容移动到不同的位置,即使在某种情况下,代码本身并没有实际执行


如果您的代码有未定义的行为,上述操作可能会在“工作”、“崩溃”、“鼻魔”等操作之间切换。不,不执行的代码不会导致分段错误

其他一些代码(在您显示的代码之前执行)将是原因


另一个代码显示了未定义的行为(按照C++标准中的“未定义”的含义),并覆盖了它不应该有的内存区域。从代码中删除Eng/Cux>块可以使实现(编译器、链接器等)重新调整其使用的程序和数据在内存中的布局。(例如,代码和数据位于内存中的位置)。这反过来会改变违规代码覆盖内存的效果(例如,它会改变被覆盖的内存是用于存储变量,还是操作系统认为程序不应访问的内存区域)如果看不到完整的代码,很难说出来,但我猜是这样的

parser->scanner->getToken().getNumber();
parser->advance();
(或此处未附加的其他代码)具有某种与之相关的未定义行为,您在
else
部分遇到分段错误只是运气的问题(是的,您在这方面很幸运。想想如果无法复制它会发生什么情况)


尝试查看
scanner
getToken()
getNumber()
在它们的实现中做了什么,并找到可能导致未定义行为的任何操作(可能
getToken()
返回对函数内部初始化的对象的引用?).

是哪一行导致了segfault?听起来像是未定义的行为。看:哈哈,为什么我和Peter的答案一样得到-2?我没有否决投票,但你的答案得出了与我相反的结论。