伪IT男
分类: 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