描述:
类构造函数 代码:
m_ptArray = NULL;
析构函数代码
if(m_ptArray!=NULL)
{
delete[] m_ptArray;
m_ptArray = NULL;
}
内存申请函数代码
SetPointParam(CPoint pt,int nWhich,UINT uParam)
{
if(uParam!=0)
{//初始化点数组
if(m_ptArray!=NULL)
delete m_ptArray;
m_ptArray = new Point[uParam];
}
}
现在的问题是 申请内存成功
中间没有外部对该指针进行使用
但是 当析构函数执行delete时 dbgheap.c中的HeapValidate会返回FALSE
编译器是VS2003
当前程序是个active控件
解决方案1:
if(m_ptArray!=NULL)
delete m_ptArray;
这里有问题,是delete []m_ptArray
再检查参数uParam的值,有可能这个值非常非常大
解决方案3:要么是你的指针被改写了(你跟踪一下分配后的值,再跟踪一下释放前的值,两个值释放相同?),要么你是跨模块进行分配释放的
解决方案4:晕,数组的释放需要用中括号,所以2楼的写法是正确的
解决方案5: LZ的代码给得乱
SetPointParam(CPoint pt,int nWhich,UINT uParam)
{
if(uParam!=0)
{//初始化点数组
if(m_ptArray!=NULL)
delete [] m_ptArray;
m_ptArray = new CPoint[uParam];
}
}