2

在我的程序中,我使用了一个二维矩阵,其中每个单元代表一个由两个双精度组成的结构。在我的程序结束时,我想释放这个矩阵使用的所有内存。所以我写了一个这样的双循环“for”:

if (I != NULL)
{
    for (i = 0; i < nb_prev; i++)
    {
        for (j = 0; j < nb_samples; j++)
        {
            free(&(I[i][j]));
        }
        free(&(I[i]));
    }
} 

但是在第二个“for”中的第二个循环之后,我得到了一个堆错误。也许我做错了。有人可以帮我吗?

从评论更新:

内存分配如下:

Power_time **I; 
I = (Power_vtime)malloc(sizeof(Power_time*)*nb_prev); 
if (I == NULL) exit(0); 
for (i = 0; i < nb_prev; i++) { 
    I[i] = (Power_time*)malloc(sizeof(Power_versus_time)*nb_samples); 
    if (I_arriv[i] == NULL) exit(0); 
}
4

1 回答 1

1

由于I是结构的二维矩阵(而不是指向结构的指针),因此不应该有内部循环。

你还需要free(I)在最后做。

基本上,你如何释放内存应该是你如何分配它的镜像。您有一个单malloc()后跟一个malloc()s 的一维循环。镜像是一个一维循环,free()最后是一个循环free()

于 2013-03-21T09:21:17.620 回答