Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
char* pArray = nullptr; { char buffer[64]; sprintf_s(buffer,"Time: 123456"); pArray = buffer; } cout<<pArray<<endl;
即使缓冲区已被释放回堆栈,也会显示“时间:123456”。这里发生了什么?这安全吗?不安全?
这是未定义的行为。内存可能没有被清除。
您的打印声明有效,这纯粹是运气。当一个对象超出范围或被删除时,内存被标记为已释放而不是实际擦除。程序可以回收并覆盖它。
您不再使用内存,但数据仍然存在。
除非您知道自己在做什么,否则您不应该这样做。
您可以使用这样的技巧将一些参数传递给函数,但这非常不安全。