请教一个内存释放的问题~

老火 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 ",第一个就没事,不加上面释放的代码也没事...先谢谢了~
...全文
195 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
WizardK 2007-08-03
  • 打赏
  • 举报
回复
定义了结构类型却不用,令人费解
raymonzhao 2007-08-03
  • 打赏
  • 举报
回复
我建议给结构体也加一个析构的,最好用NEW或DELETE.这样会调用析构函数来释放,如果用MALLOC和FREE的话,一般有自己的内存管理比较好.
woodyk 2007-08-03
  • 打赏
  • 举报
回复
为什么不整个结构体为单位来申请和释放内存呢?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧