在函数内分配内存然后释放它

时间:2015-04-28 13:33:16

标签: c dynamic-memory-allocation

我有一个在执行过程中被多次调用的函数。在这个函数里面我分配了一个数组:

double **MUDG_table;

//dynamic allocate array of MUDG_table (1st Dimension)
MUDG_table = calloc(arr_row,sizeof(double *));

//check if the memory has been allocated correctly
if (MUDG_table==NULL) 
{
    printf("Error allocating memory!\n"); //print an error message
    return 1; //return with failure
}

for (cv02=0;cv02<arr_row;cv02++)
{
    MUDG_table[cv02] = calloc(arr_column, sizeof(double));

    //check if the memory has been allocated correctly
    if (MUDG_table[cv02]==NULL) 
    {
        printf("Error allocating memory!\n"); //print an error message
        return 1; //return with failure
    }
}

当我完成计算并在返回值之前,我想尝试释放内存:

//free memory
for (cv02=0;cv02<arr_row;cv02++)
{
    free(MUDG_table[cv02]);
}
free(MUDG_table);

它崩溃了。

如果我删除它,它会工作几次(正如我所说的那样,函数在一个循环中多次被调用,每次都有不同的参数)然后它崩溃了。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您没有提供足够的信息来确定导致错误的原因,因为您提供的代码看起来还不错。很可能一个或多个指针被破坏,或者arr_row在分配和释放之间增加。

然而,你可能会遇到比你需要做的更多的麻烦。 如果

  • 您的程序可以依赖于C99中的新功能和
  • 在包含它的函数的任何一次运行期间不需要更改数组的维度(即没有重新分配)

然后使用可变长度数组会简单得多:

double MUDG_table[arr_row][arr_column];

这不一定能解决您的 root 问题,但它肯定会简化您的代码,并可能更容易识别根问题。