我有一个在执行过程中被多次调用的函数。在这个函数里面我分配了一个数组:
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);
它崩溃了。
如果我删除它,它会工作几次(正如我所说的那样,函数在一个循环中多次被调用,每次都有不同的参数)然后它崩溃了。有什么想法吗?
答案 0 :(得分:1)
您没有提供足够的信息来确定导致错误的原因,因为您提供的代码看起来还不错。很可能一个或多个指针被破坏,或者arr_row
在分配和释放之间增加。
然而,你可能会遇到比你需要做的更多的麻烦。 如果强>
然后使用可变长度数组会简单得多:
double MUDG_table[arr_row][arr_column];
这不一定能解决您的 root 问题,但它肯定会简化您的代码,并可能更容易识别根问题。