本地变量的c ++内存管理内存分配

在下面的代码中,我将多个整数数组分配给一个指针。 在每次调用时,指针的地址都是相同的,至少在我运行它时。 如果我没有使用delete [] y那么这个进程会被杀死而不会抛出任何异常。 如果我添加该行,该过程将永远运行。

我的问题是,因为在这两种情况下(使用或不使用delete ),指针的地址在函数调用之间保持不变,这是否意味着内存中的相同空间被分配? 如果是的话,为什么在一个案例中这个过程停了下来,而另一个呢不是?

在一个更普遍的问题中,函数返回时用于局部变量的内存会发生什么变化? 内存管理策略在常规变量和指针之间是不同的吗?

#include<cstdio>
#include<iostream>
#include<exception>
#include<new>

using namespace std;

void foo();

int main()
{
    while(true)
    foo();   
}

void foo()
{
     try{
           int *y=new int[1000];
           printf("%Xn",&y);
           // delete []  y;
      }
     catch(exception &exc){
           cerr<< exc.what();
      }

}

您正在打印指针变量的地址,而不是分配区域的地址。 试试看看分配区域的地址:

printf("%pn", (void*)y);

如果delete指针,则可能会在每次调用中new获得相同的值。 如果你不delete指针,那么你永远不会得到相同的指针返回,因为函数必须分配新的内存,系统不能重新使用以前删除的内存。

并且您动态分配的内存保持为进程的剩余部分分配,与变量可以是本地的意义不同,它不是“本地”的。 如果你没有释放(通过使用delete )内存,那么你有内存泄漏。


当函数返回时用于局部变量的内存被下一个函数调用和下一个函数的局部变量重用。

链接地址: http://www.djcxy.com/p/36341.html

上一篇: c++ memory management memory allocation on local variables

下一篇: Memory Management : scope and local pointer variable