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

时间:2018-05-24 08:44:21

标签: c++ gcc segmentation-fault

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

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;
 }

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

为什么会这样?

1 个答案:

答案 0 :(得分:10)

您编写的程序行为是 undefined

void函数必须在所有控制路径上都有明确的返回值。

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

相当多的编制者会警告你有关如上所述的微不足道的案件。你没有设置足够高的警告级别吗? (将-Wall-Wextra传递给&#34;打开&#34; gcc上的警告级别。)

请注意,C ++标准不要求编译器编译失败:理论计算机科学(暂停问题)告诉我们无法证明可达性。