【问题标题】:memory leak questions about c programming关于 c 编程的内存泄漏问题
【发布时间】:2016-03-06 03:15:53
【问题描述】:

这个函数会不会导致内存泄漏?

函数是:

double list(double *list2){
  double *list3=(double *)malloc(sizeof(double));
  some operations...
  return *list3;
}

更新:

这有帮助吗?

int main(){

 operations...
 double list4;
 list4=list(&list4);
 free(&list4);

 return 0;
}

【问题讨论】:

  • 预测:有人会评论说你不应该从 malloc 中转换结果。
  • 更新应该有什么帮助?
  • main中的free函数可以释放list函数中分配的空间吗?如果不是,为什么?
  • 这会崩溃,因为你正在释放 list4 的地址,它在堆栈上,而不是 malloced。

标签: c memory-leaks


【解决方案1】:

是的,确实如此:它返回了存储在已分配内存中的值的副本,但分配的内存本身已泄漏(因为地址已“丢失”)。

【讨论】:

  • 所以这个值的副本存储在堆栈中,而我在堆中分配它,所以它们的地址不同?
  • 当然;不同地方的东西怎么会有相同的地址?
【解决方案2】:

是的,因为您正在分配该双精度而不是释放它或返回指针(或使其全局可访问)。一旦函数返回,指针就丢失了,无法释放。

【讨论】:

    【解决方案3】:

    它会产生一个分段错误,因为你正在释放一个函数内部分配的内存地址。

    因此,一旦函数返回,分配将丢失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 2021-05-23
      • 2011-10-07
      • 2021-09-01
      • 1970-01-01
      相关资源
      最近更新 更多