1
char* pArray = nullptr;
{
    char buffer[64];
    sprintf_s(buffer,"Time: 123456");
    pArray = buffer;

}
cout<<pArray<<endl;

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

4

2 に答える 2

2

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

印刷ステートメントが機能するのは幸運です。オブジェクトがスコープ外になるか削除されると、メモリは解放済みとしてマークされ、実際には消去されません。プログラムはそれを再利用して上書きすることができます。

于 2012-04-15T18:43:09.090 に答える
0

あなたはもうメモリを使用していませんが、データはまだそこにあります。

自分が何をしているのかを知らない限り、そのようなことをしてはいけません。

そのようなハックを使用して、いくつかのパラメーターを関数に渡すことができますが、それは非常に安全ではありません。

于 2012-04-15T18:46:21.743 に答える