関数からクラスポインタを返す 質問する

関数からクラスポインタを返す 質問する

何が問題なのかよく分かりません (C++ については初心者なのでご了承ください)

私にはこのクラスがあります:

Foo
{
  string name;
  public:
     SetName(string);
}
string Foo::SetName(string name)
{
  this->name = name;
  return this->name;
};
//////////////////////////////////////////////
//This  is where I am trying to return a Foo pointer from this global function:

Foo * ReturnFooPointer()
{
  Foo foo;
  Foo * foo_ptr;
  foo_ptr = &foo;
  return foo_ptr;
}

コンパイル時には問題なくコンパイルされます。しかし、実行時には実行時例外(何らかのアクセス違反)が発生します。

何が間違っているのでしょうか?

ベストアンサー1

ヒープ上に新しい Foo を作成するには、代わりに new キーワードを使用する必要があります。
関数が終了するとスタック上のオブジェクトは解放されるため、メモリ内の無効な場所へのポインターが返されます。

正しいコードは次のとおりです。

Foo * ReturnFooPointer()
{
  Foo * foo_ptr = new Foo();
  return foo_ptr;
}

後で返すポインターを削除することを忘れないでください。

後でコードで説明します:

Foo *pFoo = ReturnFooPointer();
//Use pFoo
//...
delete pFoo;

おすすめ記事