不从函数返回值会导致段错误



发现了我不理解的奇怪行为:

std::vector<std::string> subdomainVisits(std::vector<std::string> &cpdomains)
{
// return std::vector<std::string>();
}
int main(int argc, char const *argv[])
{
std::vector<std::string> data = { "9001 discuss.leetcode.com" };
auto result = subdomainVisits(data);
return 0;
}

在这种情况下,subdomainVisits函数中的注释return会导致分段错误(使用 gcc 版本 7.3.0(Debian 7.3.0-19((。取消注释可以解决此问题。

为什么会这样?

编写的程序的行为是未定义的

void函数必须在所有控制路径上具有显式返回值。

唯一的例外是main,它有一个隐式return 0;

相当数量的编译器会警告您上述琐碎的情况。您是否没有将警告级别设置得足够高?(通过-Wall-Wextra以"调高"gcc上的警告级别。

请注意,C++标准并不要求编译器编译失败:理论计算机科学(停止问题(告诉我们,可访问性是不可能证明的。

相关内容

  • 没有找到相关文章

最新更新