Является ли этот метод строкой из функции, которая приведет к повреждению памяти?

Я хотел бы определить такую ​​функцию, чтобы я возвращал строку и логическое значение, указывающее, является ли результат действительным. Как это:

bool getStringOrTimeout(String *s) {
  ...
  if (timed_out) {
    return false;
  } else {
    *s = String();
    return true;
  }
}

Это вызовет проблему с памятью, потому что строка выделена в стеке и освобождена, когда она покидает область видимости, или это нормально?

0
Вам не нужно использовать конструктор String. Вы могли бы так же легко сказать: * s = "foo";
добавлено автор Nick Gammon, источник

1 ответы

Вам лучше передать строку по ссылке, например:

bool getStringOrTimeout(String & s)
{
  if (timed_out)
    return false;
  s = "foo";
  return true;

}

Это означает, что строка вызывающего абонента будет изменена. И вам больше не нужно передавать указатель на строку.

1
добавлено
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest