在我的程序中,我使用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);
}
答案 0 :(得分:1)
由于I
是结构的2D矩阵(而不是结构的指针),因此不应该有内循环。
您最后还需要free(I)
。
基本上,你如何释放内存应该是你如何分配内存的镜像。您有一个malloc()
后跟一个malloc()
s的循环。镜像是free()
的一维循环,最后是一个free()
。