Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2053822
  • 博文数量: 454
  • 博客积分: 10921
  • 博客等级: 上将
  • 技术积分: 5396
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-15 15:20
个人简介

伪IT男

文章分类

全部博文(454)

文章存档

2016年(2)

2013年(6)

2012年(17)

2011年(29)

2010年(24)

2009年(54)

2008年(53)

2007年(202)

2006年(67)

分类: C/C++

2006-12-12 21:34:58

内存错误

现象:“0x7c809783"指令引用的“0xdddddd1”内存。该内存不能为“written”。

要终止程序,请单击“确定”。

       原因:建立的 CBeamData类对象,m_BeamData 。如果删除其中的一个的时候,我用

       memmove(m_BeamData+j,m_BeamData+j+1,m*sizeof(CBeamData));

       m_BeamData指针后面的数据移动到前面。结果在关闭程序时,就会出现如上的错误。查了一下,是内存的错误。有人说是delete 指针引起的。仔细查看了关闭时的操作,发现

 

CImrtPlan::~CImrtPlan()

{

       if(NULL!=m_BeamData)delete []m_BeamData;

}

 

看了看林锐的《高质量程序设计指南》P138页,才知道这叫“野指针”。改为

CImrtPlan::~CImrtPlan()

{

       if(NULL!=m_BeamData) m_BeamData=NULL;

       delete []m_BeamData;

//     if(NULL!=m_BeamData)delete []m_BeamData;

      

      

}

 

一切ok.

 

总结,就是一个指针在delete之前,最好是让它为NULL

阅读(2295) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-01-02 10:48:41

压根看不懂