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

}
cout<<pArray<<endl;

即使缓冲区已被释放回堆栈,也会显示“时间:123456”。这里发生了什么?这安全吗?不安全?

4

2 回答 2

2

这是未定义的行为。内存可能没有被清除。

您的打印声明有效,这纯粹是运气。当一个对象超出范围或被删除时,内存被标记为已释放而不是实际擦除。程序可以回收并覆盖它。

于 2012-04-15T18:43:09.090 回答
0

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

除非您知道自己在做什么,否则您不应该这样做。

您可以使用这样的技巧将一些参数传递给函数,但这非常不安全。

于 2012-04-15T18:46:21.743 回答