この単純なコードがガベージを返すのはなぜですか?
char *output()
{
char o[2] = "A";
return o;
}
int main()
{
std::cout << output();
}
この単純なコードがガベージを返すのはなぜですか?
char *output()
{
char o[2] = "A";
return o;
}
int main()
{
std::cout << output();
}
無効なメモリへのポインタを返すため、戻るoと破棄されoutputます。
いくつかのオプションがあります。
malloc)メモリを割り当て、このメモリにコピー"A"してそのアドレスを返しますreturn "A";PSもちろん、使用することはできstd::stringますが、この問題は発生しません。または、returnの代わりにin /outparamを使用します。
oはのローカル変数であるoutput()ため、関数内でのみスコープと有効期間があります。関数がメモリアドレスを返すと、削除されたメモリのアドレスが返されます。
返される値が「値による戻り」メソッドのためにプログラムが機能した場合。
デフォルトのメモリ指定子の代わりに正しい出力が必要な場合は、メモリ割り当てや動的メモリ割り当てなどautoの他のものを使用する必要があります。staticextern