void PrintArray()
{
  int a[4] = {4,3,1,5};
  for(int i=0; i<4; i++)
    cout<<a[i];
}

在函数调用完成之后,分配给指针变量“a”和“a”所指向的4整数块的内存究竟发生了什么?
块和指针变量的内存是否会被取消分配,还是会导致某种形式的内存泄漏?

最佳答案

a不是静态变量,它是automatic变量,来自draft C99 standard6.2.4对象的存储持续时间第4段说:



在第3段中,它将static的生存期描述为程序的生存期,在第5段中说:



因此,换句话说,对于自动变量,其生存期扩展到其作用域,在这种情况下,a的作用域是PrintArray函数,并且在退出该作用域后会释放与其关联的存储。

对于C++,draft standard中的相关部分是3.7.3自动存储持续时间第1段说:

10-08 13:02