繁体   English   中英

C ++内存管理在局部变量上的内存分配

[英]c++ memory management memory allocation on local variables

在下面的代码中,我多次将整数数组分配给指针。 在每次调用中,指针的地址至少在运行时是相同的。 如果我不使用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("%X\n",&y);
           // delete []  y;
      }
     catch(exception &exc){
           cerr<< exc.what();
      }

}

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

printf("%p\n", (void*)y);

如果delete指针,则每个调用中的new值都可能相同。 如果不delete指针,则将永远不会返回相同的指针,因为该函数必须分配新的内存,并且系统无法重用某些先前删除的内存。

动态分配的内存会为剩余的过程分配,而在变量可以是本地的意义上,它不是“本地的”。 如果您没有释放内存(通过使用delete ),则内存泄漏。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM