【问题标题】:Free memory from a pointer to pointer - C destructor从指向指针的指针释放内存 - C 析构函数
【发布时间】:2015-09-05 06:12:17
【问题描述】:

如果我有下一个功能

Stack *construct_stack(void) {
  Stack *instance = (Stack *) malloc(sizeof(Stack));

  // Stuff...

  return instance;
}

这是一种“构造函数”。但我一直遇到“析构函数”的问题。

如果我这样做,我会得到一个错误。

void destruct_stack(Stack **st) {
  // Stuff...

  free(st);
}

有什么想法吗?

【问题讨论】:

  • 为什么将指针传递给指针?只需传递一个指针并释放它。
  • free(*st);*st=NULL;
  • '因为我的代码看起来像这样:Stack *s = construct_stack(); // Stuff... destruct_stack(&s);

标签: c pointers memory-management memory-leaks


【解决方案1】:
void destruct_stack(Stack **st) {
  // Stuff...

  free(*st);//free the pointer which st points to
  *st = NULL;//set it to null
}

而且你不需要转换 malloc 的结果:Do I cast the result of malloc?

【讨论】:

    【解决方案2】:
    void destruct_stack(Stack **st)
    

    这里st是指向你分配内存的指针(即instance)的指针(st持有指针instance的地址)。

     free(st); // you didn't allocate memory to st therefore gives error
    

    所以你应该像这样释放*st

       free(*st);
       *st=NULL;  // just a good practice 
    

    或者以其他方式代替指针的地址(即&instance),您可以传递指针instance本身,然后传递free,但您需要更改传递给函数的参数类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-29
      • 2017-04-07
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 2012-08-29
      相关资源
      最近更新 更多