このメソッドは、メモリ破損の原因となる関数からの文字列ですか?

私は、結果が有効かどうかを示す文字列とブール値を返すような関数を定義したいと思います。このような:

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
追加された