Bu yöntem, bir işlevden bir bellekte bellek bozulmasına neden olacak mı?

Sonucun geçerli olup olmadığını belirten bir dize ve bir boolean döndürmek için bir işlev tanımlamak istiyorum. Bunun gibi:

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

Bu bir bellek problemine neden olur, çünkü dizge yığına ayrılır ve kapsamı terk ettiğinde ayrılır, yoksa bu tamam mı?

0
Orada String kurucuyu kullanmanız gerekmiyor. Kolayca söylediğin gibi: * s = "foo";
katma yazar Nick Gammon, kaynak

1 cevap

Dizgeyi referans olarak iletmekten daha iyi olursun, böyle:

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

}

Bu, arayanın dizesinin değiştirileceği anlamına gelir. Ve artık bir işaretçiyi bir dizgiye geçirmeniz gerekmiyor.

1
katma