指针释放之结构体

本文深入探讨了数据结构的高效使用与内存管理策略,包括动态分配与释放内存的技术细节,以及如何优化数据结构以提升程序性能。通过实例解析,帮助开发者掌握关键技巧。

typedef struct{
uint len;
uchar *s;
}nint;

typedef struct{
xtime_t log_time[16];
uchar log_uchar[16];
ushort log_ushort[16];
uint log_uint[16];
uint log_addr[16];
ulong log_ulong[16];
nint log_nint[32];
}LOG;

typedef struct{
int code;
LOG *log;
long total;
char type;
}QueryChat;


queryChat->log = (LOG *)malloc(sizeof(LOG)*gettotal);
memset(queryChat->log,0,sizeof(LOG)*gettotal);


for (j = 0; j < 32; j++){
if (fread(&((queryChat->log+i)->log_nint[j].len), sizeof(int), 1, fp) != 1){
goto _FAIL_;
}
if ((queryChat->log+i)->log_nint[j].len){
if (((queryChat->log+i)->log_nint[j].s = (u_char*)malloc((queryChat->log+i)->log_nint[j].len + 1)) != NULL){
if (fread((queryChat->log+i)->log_nint[j].s, (queryChat->log+i)->log_nint[j].len, 1, fp) != 1){
goto _FAIL_;
} else {
(queryChat->log+i)->log_nint[j].s[(queryChat->log+i)->log_nint[j].len] = 0;
}
}
}
}

int j=0,k=getnum;
if(NULL != queryChat){
for(i=0;i<k;i++){
if(queryChat->log+i){
for(j=0;j<32;j++){
if((queryChat->log+i)->log_nint[j].s){
free((queryChat->log+i)->log_nint[j].s);
(queryChat->log+i)->log_nint[j].s = NULL;
}
}

}
free(queryChat->log);
free(queryChat);
queryChat = NULL;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值