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

} 
cout<<pArray<<endl; 

即使緩衝區已被釋放回堆棧,也會顯示「時間:123456」。這裏發生了什麼?這安全嗎?不安全?C++ char數組範圍

+0

不,它不安全。它的'未定義行爲'。 – scientiaesthete 2012-04-15 18:42:29

+0

在SO上可能有另外20或30個帖子提出同樣的問題... – 2012-04-15 18:52:13

回答

1

這是未定義的行爲。內存可能未被清除。

這是純粹的運氣您的打印聲明的作品。當一個對象超出範圍或被刪除時,內存被標記爲已釋放並且未被實際擦除。該程序可以回收它並覆蓋它。

0

您不再使用存儲器,但數據仍然存在。

你不應該這樣做,除非你知道你在做什麼。

您可以使用這樣的黑客將某些參數傳遞給函數,但它非常不安全。