我尝试释放内存时出现堆错误

时间:2013-03-21 09:18:52

标签: c

在我的程序中,我使用2D-matrice,其中每个单元格代表由两个双精度组成的结构。在我的程序结束时,我想释放这个matrice使用的所有内存。 所以我写了一个“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]));
    }
} 

但是我在seconde“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); 
}

1 个答案:

答案 0 :(得分:1)

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

您最后还需要free(I)

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