0
char* pArray = nullptr;
{
char buffer[64];
sprintf_s(buffer,"Time: 123456");
pArray = buffer;
}
cout<<pArray<<endl;
即使緩衝區已被釋放回堆棧,也會顯示「時間:123456」。這裏發生了什麼?這安全嗎?不安全?C++ char數組範圍
char* pArray = nullptr;
{
char buffer[64];
sprintf_s(buffer,"Time: 123456");
pArray = buffer;
}
cout<<pArray<<endl;
即使緩衝區已被釋放回堆棧,也會顯示「時間:123456」。這裏發生了什麼?這安全嗎?不安全?C++ char數組範圍
這是未定義的行爲。內存可能未被清除。
這是純粹的運氣您的打印聲明的作品。當一個對象超出範圍或被刪除時,內存被標記爲已釋放並且未被實際擦除。該程序可以回收它並覆蓋它。
您不再使用存儲器,但數據仍然存在。
你不應該這樣做,除非你知道你在做什麼。
您可以使用這樣的黑客將某些參數傳遞給函數,但它非常不安全。
不,它不安全。它的'未定義行爲'。 – scientiaesthete 2012-04-15 18:42:29
在SO上可能有另外20或30個帖子提出同樣的問題... – 2012-04-15 18:52:13