释放时分配在堆栈上的内存是否被清除?

Does memory allocated on the stack get cleared out when freed?

如果我们像这样在栈上分配内存:

void foobar()
{
    int arr[10];
}

foobar()退出后,对该内存块(arr)的引用丢失。但是它归零了吗?

But is it set to zero?

不/也许。无法保证未分配内存的“价值”。标准也没有任何方法保证观察到假设的“值”。

从信息安全的角度来看:如果您将私人信息存储在一个对象中,那么您应该假设即使在该对象的存储期限之后,该信息也可能会持续存在。如果您的程序容易受到攻击(通常是通过未定义的行为),攻击者可能能够访问该信息。

否,该值未设置为零。但是你甚至不应该为它烦恼,因为这个值是不可访问的。它可能具有函数结束前的值,但访问它将是 Undefined behavior

value 可能存在的原因是因为程序只会移动其堆栈指针。下次堆栈到达该地址时,它只会用它需要的值重写它。