Wird diese Methode von einer Funktion zu einer Zeichenfolge, die Speicherbeschädigung verursacht?

Ich möchte eine Funktion so definieren, dass ich eine Zeichenfolge und einen booleschen Wert zurückgebe, der angibt, ob das Ergebnis gültig ist. So was:

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

Wird dies zu einem Speicherproblem führen, da die Zeichenfolge auf dem Stapel zugewiesen und freigegeben wird, wenn sie den Bereich verlässt, oder ist das in Ordnung?

0
Sie müssen den String-Konstruktor dort nicht verwenden. Sie hätten genauso gut sagen können: * s = "foo";
hinzugefügt der Autor Nick Gammon, Quelle

1 Antworten

Sie sind besser dran, indem Sie die Zeichenfolge als Referenz übergeben:

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

}

Das bedeutet, dass die Zeichenfolge des Aufrufers geändert wird. Und Sie müssen nicht mehr einen Zeiger auf eine Zeichenfolge übergeben.

1
hinzugefügt