请教一个内存释放的问题~
两个结构体定义:
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 ",第一个就没事,不加上面释放的代码也没事...先谢谢了~
[解决办法]
为什么不整个结构体为单位来申请和释放内存呢?
[解决办法]
我建议给结构体也加一个析构的,最好用NEW或DELETE.这样会调用析构函数来释放,如果用MALLOC和FREE的话,一般有自己的内存管理比较好.
[解决办法]
定义了结构类型却不用,令人费解