使用指针的2D数组 - 内存泄漏

时间:2017-07-22 16:09:42

标签: c memory memory-management memory-leaks

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));
}

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

1 个答案:

答案 0 :(得分:1)

要释放内存,您必须与分配内存时所做的完全相反。

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

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

然后做其余的事情:

free( m );
free( sol );