2012-04-15 19 views
0
char* pArray = nullptr; 
{ 
    char buffer[64]; 
    sprintf_s(buffer,"Time: 123456"); 
    pArray = buffer; 

} 
cout<<pArray<<endl; 

バッファーがスタックに割り当て解除されても、「Time:123456」と表示されます。ここで何が起こっているのですか?これは安全ですか?危険な?C++ char配列のスコープ

+0

いいえ、安全ではありません。その「未定義の動作」。 – scientiaesthete

+0

同じ質問をしているので、ここに別の20または30の投稿があります... –

答えて

1

これはで、定義されていない動作です。メモリがクリアされていない可能性があります。

あなたのprintステートメントがうまくいっています。オブジェクトが有効範囲外になるか削除されると、メモリは解放されたものとしてマークされ、実際には消去されません。プログラムはそれを取り戻して上書きすることができます。

0

メモリはもう使用していませんが、データはまだ残ります。

何をしているのか分からない限り、そんなことはしないでください。

このようなハックを使用すると、一部のパラメータを関数に渡すことはできますが、非常に危険です。