この単純なコードがガベージを返すのはなぜですか?
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
の他のものを使用する必要があります。static
extern