2

私のプログラムでは、各セルが2つのdoubleで構成される構造を表す2D行列を使用します。プログラムの最後に、このマトリックスで使用されているすべてのメモリの割り当てを解除したいと思います。だから私はそのような「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」内の2番目のループの後にヒープエラーが発生します。多分私は間違いをしました。誰か助けてくれませんか?

コメントから更新:

メモリは次のように割り当てられます。

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は構造体の2Dマトリックス(構造体へのポインターではない)であるため、内部ループがあってはなりません。

free(I)また、最後に行う必要があります。

基本的に、メモリの割り当てを解除する方法は、メモリの割り当て方法の鏡像である必要があります。シングルのmalloc()後にsの1Dループが続きますmalloc()。鏡像は1Dループであり、最後free()にシングルが続きます。free()

于 2013-03-21T09:21:17.620 に答える