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