【问题标题】:how to free memory for structure variable如何为结构变量释放内存
【发布时间】:2011-03-09 08:59:48
【问题描述】:
typdef struct _structname  
{  
    int x;  
    string y;  
} structure_name;

structure_name variable;

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

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

【问题讨论】:

  • 使用编辑字段上方的格式化代码按钮来格式化代码。
  • 你指的是哪个问题?

标签: c++


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    使用newmalloc 完成动态分配,并分别使用deletefree 完成释放。

    如果您的程序在任何地方都没有使用newmalloc,那么您也不需要使用deletemalloc。请注意,delete 的数量与new 的数量一样多。 mallocfree 也是如此。

    也就是说,在一个程序中:

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

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

    【讨论】:

    • 实际上,当我在做 variable.y="sample string" 时,内存正在分配。所以 = 运算符分配内存,这会导致问题。我现在该如何解决?
    • @SPB:内存是由 std::string 类分配的,而不是你自己分配的。所以你不必担心它。正如我所说,如果你使用 new,那么你必须使用 delete,否则不会,至少在场景中不会!
    【解决方案3】:

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

    用途:

    struct structure_name
    {
        int x;
        int y;
    };
    

    如果您以这种方式创建 myVar:

    structure_name myVar;
    

    你不需要释放它,它会在超出范围时自动销毁和释放。

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

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

    【讨论】:

      【解决方案4】:

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

      {
          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
      

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-08-23
          • 1970-01-01
          • 2016-06-17
          • 2015-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-11
          相关资源
          最近更新 更多