请教一个内存释放的问题~
老火 2007-08-02 11:04:59 两个结构体定义:
typedef struct { /* A LAYER OF A NET: */
INT Units;
REAL* Output;
REAL* Error;
REAL** Weight;
REAL** WeightSave;
REAL** dWeight;
} LAYER;
typedef struct { /* A NET: */
LAYER** Layer;
LAYER* InputLayer;
LAYER* OutputLayer;
REAL Alpha;
REAL Eta;
REAL Gain;
REAL Error;
} NET;
分配内存代码为:
INT l,i;
Net->Layer = (LAYER**) calloc(NUM_LAYERS, sizeof(LAYER*));
for (l=0; l<NUM_LAYERS; l++) {
Net->Layer[l] = (LAYER*) malloc(sizeof(LAYER));
Net->Layer[l]->Units = Units[l];
Net->Layer[l]->Output = (REAL*) calloc(Units[l]+1, sizeof(REAL));
Net->Layer[l]->Error = (REAL*) calloc(Units[l]+1, sizeof(REAL));
Net->Layer[l]->Weight = (REAL**) calloc(Units[l]+1, sizeof(REAL*));
Net->Layer[l]->WeightSave = (REAL**) calloc(Units[l]+1, sizeof(REAL*));
Net->Layer[l]->dWeight = (REAL**) calloc(Units[l]+1, sizeof(REAL*));
Net->Layer[l]->Output[0] = BIAS;
if (l != 0) {
for (i=1; i<=Units[l]; i++) {
Net->Layer[l]->Weight[i] = (REAL*) calloc(Units[l-1]+1, sizeof(REAL));
Net->Layer[l]->WeightSave[i] = (REAL*) calloc(Units[l-1]+1, sizeof(REAL));
Net->Layer[l]->dWeight[i] = (REAL*) calloc(Units[l-1]+1, sizeof(REAL));
}
}
}
请问如何释放?
下面的好像不对?
for (l=0; l<NUM_LAYERS; l++)
{
if (l != 0)
{
for (it=1; it<=Units[l]; it++)
{
free(Net.Layer[l]->Weight[it] ) ;
free(Net.Layer[l]->WeightSave[it]);
free(Net.Layer[l]->dWeight[it]) ;
}
}
free(Net.Layer[l]->Output);
free(Net.Layer[l]->Error );
free(Net.Layer[l]->Weight);
free(Net.Layer[l]->WeightSave);
free(Net.Layer[l]->dWeight );
free(Net.Layer[l]);
}
free(Net.Layer);
为什么我这样释放以后,紧接着再使用下一个时,出现unhandled expection in xxx.exe 0xC0000005:Acess Violation ",第一个就没事,不加上面释放的代码也没事...先谢谢了~