【问题标题】:2D array using pointers - Memory leakage使用指针的二维数组 - 内存泄漏
【发布时间】:2017-07-22 16:09:41
【问题描述】:
double* sol = (double*) calloc(n_samp, sizeof(double));
double** m = (double**) calloc(n_samp, sizeof(double*));
for (int i = 0; i < n_samp; i++){
    *(m+i) = (double*) calloc((n_samp + 1), sizeof(double));
}

我正在使用上述方法生成一个二维数组。它工作正常,但 valgrind 告诉我存在内存泄漏。在这里释放记忆的正确方法是什么?

【问题讨论】:

  • 你不应该在 C 中转换 calloc 的返回值
  • 只需执行分配内存的相反操作
  • @EdHeal 感谢您的评论。抱歉,我不确定您的确切意思。那么我应该只做 free(sol)、free(m) 和 for loop{free((m+i))} 吗?
  • 运行循环释放内存,然后释放msol
  • 二维数组在哪里?

标签: c memory memory-management memory-leaks


【解决方案1】:

要释放内存,您必须执行与分配内存时完全相反的操作。

从您在循环中创建的动态元素开始:

for (int i = 0; i < n_samp; i++){
    free( *(m+i) );
}

然后做剩下的事情:

free( m );
free( sol );

【讨论】:

  • 感谢您的回答。不幸的是,这就是我所做的(我在上面留下的评论是错误的,抱歉)。
  • 是的。 Valgrind 仍然给我一条关于“calloc”的错误消息。
  • @DavidYoung 如果您认为您已经完成了此操作但仍然无法正常工作,那么您需要发布minimal, complete, and verifiable example
  • @Rabbit76 你的意思是介于 calloc 和 free 之间,我不这么认为,它是一个 const。
  • @Rabbit76 哇,我才意识到我只有在返回函数输出后才释放内存。非常感谢。
猜你喜欢
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多