首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请问一个内存释放的有关问题

2012-01-11 
请教一个内存释放的问题~两个结构体定义:typedefstruct{/*ALAYEROFANET:*/INTUnitsREAL*OutputREAL*Erro

请教一个内存释放的问题~
两个结构体定义:
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的话,一般有自己的内存管理比较好.
[解决办法]
定义了结构类型却不用,令人费解

热点排行