C ++ char数组范围

时间:2012-04-15 18:40:12

标签: c++ arrays scope stack char

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

}
cout<<pArray<<endl;

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

2 个答案:

答案 0 :(得分:1)

未定义的行为。记忆可能没有被清除。

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

答案 1 :(得分:0)

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

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

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