char* pArray = nullptr;
{
char buffer[64];
sprintf_s(buffer,"Time: 123456");
pArray = buffer;
}
cout<<pArray<<endl;
即使已将缓冲区释放回堆栈,也会显示“时间:123456”。这里发生了什么?这样安全吗?不安全吗?
答案 0 :(得分:1)
未定义的行为。记忆可能没有被清除。
纯粹的运气你的打印声明有效。当一个对象超出范围或被删除时,内存被标记为已释放但实际上没有被删除。该程序可以回收它并覆盖它。
答案 1 :(得分:0)
您不再使用内存,但数据仍然存在。
除非你知道自己在做什么,否则你不应该这样做。
您可以使用这样的hack将一些参数传递给函数,但它非常不安全。