2012-04-15 65 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

您不再使用存储器,但数据仍然存在。

你不应该这样做,除非你知道你在做什么。

您可以使用这样的黑客将某些参数传递给函数,但它非常不安全。