何が問題なのかよく分かりません (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;