如何为结构变量释放内存

时间:2011-03-09 08:59:48

标签: c++

typdef struct _structname  
{  
    int x;  
    string y;  
} structure_name;

structure_name variable;

现在我访问variable.xy。使用后如何解除释放或释放variable使用的内存?

实际上,当我正在执行 variable.y =“sample string”时,内存将被分配。因此,=运算符会分配导致问题的内存。我现在该如何解决?

5 个答案:

答案 0 :(得分:7)

您已在堆栈上分配了结构。当它超出范围时,它将使用的内存将被释放。如果你想控制何时释放内存,你应该调查动态内存分配。

答案 1 :(得分:5)

只有在动态分配内存时才需要释放内存。

动态分配使用newmalloc完成,解除分配分别使用deletefree完成。

如果您的计划在任何地方都没有使用newmalloc,那么您也不需要使用deletemalloc。请注意,delete的{​​{1}}数量与new的数量相同。同样适用于mallocfree

即,在一个程序中:

  • 已执行的 new语句的数量等于已执行的 delete语句的数量!
  • 已执行的 malloc语句的数量等于已执行的 free语句的数量!

如果执行 deletefree的次数较少,那么您的程序就是泄漏内存。如果执行 newmalloc的次数较少,那么您的程序很可能会崩溃!

答案 2 :(得分:4)

在C ++中,您不需要“typedef”您的结构。

使用:

struct structure_name
{
    int x;
    int y;
};

如果你这样创建myVar:

structure_name myVar;

您不需要取消分配它,当它超出范围时,它将自动销毁并释放。

如果您使用过指针(使用“new”关键字创建),则需要使用“delete”关键字明确释放它们。

在C ++中,您将仅在特定情况下使用指针。

答案 3 :(得分:1)

可以通过引入一对大括号{ }来控制变量的生命周期。

{
    structure_name variable; // memory for struct allocated on stack
    variable.y = "sample string"; // y allocates storage on heap

    // ...

} // variable goes out of scope here, freeing memory on stack and heap

答案 4 :(得分:0)

不需要释放,因为你已经将它们声明为值而不是指针而不是动态分配内存。

只有在动态分配内存时才需要释放内存。