-1

重複の可能性:
ローカル変数のメモリにそのスコープ外でアクセスできますか?
この関数がガベージ値を返すのはなぜですか

この単純なコードがガベージを返すのはなぜですか?

char *output()
{
    char o[2] = "A";
    return o;
}

int main()
{
    std::cout << output(); 
}
4

2 に答える 2

4

無効なメモリへのポインタを返すため、戻るoと破棄されoutputます。

いくつかのオプションがあります。

  • 動的に(を使用してmalloc)メモリを割り当て、このメモリにコピー"A"してそのアドレスを返します
  • 文字列リテラルを直接返します:return "A";

PSもちろん、使用することはできstd::stringますが、この問題は発生しません。または、returnの代わりにin /outparamを使用します。

于 2012-10-10T07:05:38.860 に答える
0

oはのローカル変数であるoutput()ため、関数内でのみスコープと有効期間があります。関数がメモリアドレスを返すと、削除されたメモリのアドレスが返されます。

返される値が「値による戻り」メソッドのためにプログラムが機能した場合。

デフォルトのメモリ指定子の代わりに正しい出力が必要な場合は、メモリ割り当てや動的メモリ割り当てなどautoの他のものを使用する必要があります。staticextern

于 2012-10-10T07:11:14.287 に答える