关于mfc中delete对象的相关问题。

[复制链接]
查看11 | 回复3 | 2010-11-8 15:52:31 | 显示全部楼层 |阅读模式
我的代码如下:
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出来的,而且放入集合类中没有问题。)

回复

使用道具 举报

千问 | 2010-11-8 15:52:31 | 显示全部楼层
CGraph *g=(CGraph *)m_ptrArray.GetUpperBound();这句有问题吧GetUpperBound()返回的是最后一个元素的下标,怎么能转换成(CGraph*)呢应改为:CGraph *g=(CGraph *)m_ptrArray.GetAt(m_ptrArray.GetUpperBound());
回复

使用道具 举报

千问 | 2010-11-8 15:52:31 | 显示全部楼层
CGraph *g这样子定义是将g(指针)指向m_ptrArray.GetUpperBound();。而你使用.RemoveAt时,已经将该对象释放。故再去delete时出错。
回复

使用道具 举报

千问 | 2010-11-8 15:52:31 | 显示全部楼层
RemoveAt已经将对象释放了,再次delete就会出错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行