Не возвращаемое значение из функции вызывает segfault - PullRequest
0 голосов
/ 24 мая 2018

Обнаружено странное поведение, которое я не понимаю:

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 голосов
/ 24 мая 2018

Поведение вашей программы в том виде, в котором оно написано: undefined .

Не- void функция должна иметь явное возвращаемое значение на всех путях управления.

Единственное исключение из этого - main, которое имеет неявный return 0;.

Достаточное количество компиляторов предупредит вас о тривиальных случаях, таких как приведенные выше.У вас недостаточно высокий уровень предупреждения?(Передайте -Wall и -Wextra, чтобы «увеличить» уровень предупреждения на gcc.)

Обратите внимание, что стандарт C ++ не требует компилятора для сбоя компиляции: теоретическая информатика (остановка )проблема ) говорит нам, что достижимость невозможно доказать.

...