【问题标题】:Memory deallocation question内存释放问题
【发布时间】:2011-06-10 23:53:27
【问题描述】:

我只是想确保我在我的程序中正确地释放内存...

我在一个函数 ( build_proc_table() ) 中构建了一个动态分配的二维数组,并将该数组返回到调用函数的位置 ( main() )。该数组存储在 main() 中的一个变量中,我创建了一个“析构函数”函数来释放内存,但是在 main() 中也调用了析构函数,而不是最初分配数组内存的位置(在 build_proc_table () )...

我没有收到任何错误或任何东西(编译时或运行时),并且程序完全按照我的意愿运行,我只是想确保我没有导致内存泄漏。

【问题讨论】:

    标签: memory memory-leaks memory-management


    【解决方案1】:

    您手动分配的任何内存都有一个不受其范围约束的生命周期。只要在某处分配的内存稍后在其他地方被释放,就可以了。从哪里调用它并不重要。

    【讨论】:

    • 所有语言都这样吗?顺便说一句,我正在使用 C++。
    • @Aaron:我不了解宇宙中的每一种语言,但 C++(以及我所知道的所有其他具有手动内存管理功能的语言)肯定是这样。
    【解决方案2】:

    在不知道您使用的是哪种语言的情况下,很难了解具体情况。但是,只要您不更改分配和解除分配之间的引用,内存被解除分配的位置并不重要。但是,如果您在分配和解除分配之间更改了正在寻址的内存地址(在更改之前没有解除分配),则会发生内存泄漏。

    例如在 C++ 中...

    int main(){
      int* j = new int[10];
      j = new int[10];
      delete j;
    }
    

    这将是内存泄漏,因为第一个数组没有被删除。这显然是一个简化的一维示例,不使用函数。

    【讨论】:

      猜你喜欢
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-20
      • 2010-10-03
      • 2011-07-14
      相关资源
      最近更新 更多