Почему моя рекурсия не работает, я продолжаю получать ошибки seg fault

#include <cstddef>
#include "ex1.h"


unsigned int str_len_r(const char* str){
  if (*str == '\0')
  {
    return 0;
    }
  else
  {
    return 1 + str_len_r(++str);
  }
}

Может кто-нибудь подробно объяснить, почему это не работает? Я продолжаю получать эти длинные ошибки ошибки сегмента, но я не могу найти действительно хорошее объяснение того, что я делаю не так. Так это называется

string str;
  while (getline(cin, str)) {
      if (str == "<NULL>")
        cout << "Length of NULL string is " << str_len_r(NULL) << endl;
      else
        cout << "Length of string '" << str << "' is " << str_len_r(str.c_str()) << endl;
  }
Ваш код выглядит работающим. Возможно, вы даете слишком длинную строку, чтобы вызвать переполнение стека. Пожалуйста, разместите Минимальный воспроизводимый пример.
MikeCAT 09.04.2021 21:08

Что «работает» в этом контексте? Как вы вызываете функцию, что она должна делать, что вы пытались сделать для ее отладки и т. д. Кроме того, рекурсия - ужасное злоупотребление при вычислении длины строки (да, я знаю, что система образования CS думает это отличная идея и у вас нет выбора ...).

ggorlen 09.04.2021 21:10

Есть языки, которые оптимизируют рекурсию как цикл. C++ не относится к таким языкам. Рекурсия в C++ может легко вызвать переполнение стека, которое на некоторых платформах вызывает ошибку сегмента.

Eljay 09.04.2021 21:15

Разыменование нулевого указателя является неопределенным поведением. На вашей платформе такое неопределенное поведение проявляется как ошибка сегмента.

Eljay 09.04.2021 21:16

ОТ: Вы ожидаете, что <NULL> будет набран пользователем или перенаправлен из какой-то другой программы ??

drescherjm 09.04.2021 21:19

Как исправить нулевой указатель, сделав его равным чему-то?

Crippin Dior 09.04.2021 21:21

Связанный с if (!str) return 0;: https://stackoverflow.com/questions/3825668/checking-for-nul‌ l-указатель-в-c-c

drescherjm 09.04.2021 21:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
39
0

Другие вопросы по теме