char* pArray = nullptr;
{
char buffer[64];
sprintf_s(buffer,"Time: 123456");
pArray = buffer;
}
cout<<pArray<<endl;
バッファーがスタックに割り当て解除されても、「Time:123456」と表示されます。ここで何が起こっているのですか?これは安全ですか?危険な?C++ char配列のスコープ
char* pArray = nullptr;
{
char buffer[64];
sprintf_s(buffer,"Time: 123456");
pArray = buffer;
}
cout<<pArray<<endl;
バッファーがスタックに割り当て解除されても、「Time:123456」と表示されます。ここで何が起こっているのですか?これは安全ですか?危険な?C++ char配列のスコープ
これはで、定義されていない動作です。メモリがクリアされていない可能性があります。
あなたのprintステートメントがうまくいっています。オブジェクトが有効範囲外になるか削除されると、メモリは解放されたものとしてマークされ、実際には消去されません。プログラムはそれを取り戻して上書きすることができます。
メモリはもう使用していませんが、データはまだ残ります。
何をしているのか分からない限り、そんなことはしないでください。
このようなハックを使用すると、一部のパラメータを関数に渡すことはできますが、非常に危険です。
いいえ、安全ではありません。その「未定義の動作」。 – scientiaesthete
同じ質問をしているので、ここに別の20または30の投稿があります... –