Chinaunix首页 | 论坛 | 博客
  • 博客访问: 514727
  • 博文数量: 13
  • 博客积分: 6011
  • 博客等级: 准将
  • 技术积分: 990
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-09 09:57
文章分类

全部博文(13)

文章存档

2009年(10)

2008年(3)

我的朋友

分类: C/C++

2008-11-16 09:31:27

以前较少使用动态内存,好像没出过太大的问题;现在做的WNC的客户端通讯程序,用了不少动态内存的方法,结果由于没注意,害惨了自己。 typedef struct{ unsigned short wTagID;//位号标识ID char ComDataType;//实时数据的数据类型 uIDValue IDValue; }sWncCfg_RD_Sign; typedef struct{ WORD id_num; sWncCfg_RD_Sign *pWncCfg_RD_Sign; }sWncCfg_RD; int main() { sWncCfg_RD WncCfg_RD; sWncCfg_RD *pWncCfg_RD = &WncCfg_RD; // 注意1:由于下面使用realloc第一次创建动态内存,必须初始化pWncCfg_RD_Sign为 NULL,id_num为0 memset(pWncCfg_RD,0,sizeof(sWncCfg_RD)); // 注意2:由于id_num是0开始的,所以大小计算这里必须+1 pWncCfg_RD->pWncCfg_RD_Sign = (sWncCfg_RD_Sign *)realloc(pWncCfg_RD->pWncCfg_RD_Sign,sizeof(sWncCfg_RD_Sign)*(pWncCfg_RD->id_num+1)); if(pWncCfg_RD->pWncCfg_RD_Sign == NULL) { printf("WNC::malloc err, exit"); exit(0); } // 注意3:由于没注意,pWncCfg_RD_Sign = pWncCfg_RD_Sign + pWncCfg_RD->id_num +1,导致写操作了未分配的堆区,编译都是正常的,但在下一次malloc时出现段错误 pWncCfg_RD_Sign = pWncCfg_RD->pWncCfg_RD_Sign + pWncCfg_RD->id_num; pWncCfg_RD_Sign->ComDataType = ComDataType; pWncCfg_RD_Sign->wTagID = cfg_GetSign_TagID1(i); pWncCfg_RD->id_num++; }
阅读(1214) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:关于gdb

给主人留下些什么吧!~~