关于mfc中delete对象的相关问题。
我的代码如下:if(m_ptrArray.GetSize()!=0)//执行撤销{CGraph*g=(CGraph*)m_ptrArray.GetUpperBound()...
我的代码如下:
if(m_ptrArray.GetSize()!=0) //执行撤销
{
CGraph *g=(CGraph *)m_ptrArray.GetUpperBound();
m_ptrArray.RemoveAt(m_ptrArray.GetUpperBound());
delete g;
}
为什么当我把delete g注释了,程序正确,否则,程序在运行时会出错?
(其中m_ptrArray的类型为CPtrArray,我的Graph对象是new出来的,而且放入集合类中没有问题。) 展开
if(m_ptrArray.GetSize()!=0) //执行撤销
{
CGraph *g=(CGraph *)m_ptrArray.GetUpperBound();
m_ptrArray.RemoveAt(m_ptrArray.GetUpperBound());
delete g;
}
为什么当我把delete g注释了,程序正确,否则,程序在运行时会出错?
(其中m_ptrArray的类型为CPtrArray,我的Graph对象是new出来的,而且放入集合类中没有问题。) 展开
3个回答
展开全部
CGraph *g这样子定义是将g(指针)指向m_ptrArray.GetUpperBound();。
而你使用.RemoveAt时,已经将该对象释放。故再去delete时出错。
而你使用.RemoveAt时,已经将该对象释放。故再去delete时出错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
RemoveAt已经将对象释放了,再次delete就会出错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询