CWordView::CWordView()
{
m_pEditCode = new CEdit;
m_pEditWord = new CEdit;
m_pStaicCode = new CStatic;
m_pStaicWord = new CStatic;
m_pZoomView = new CZoomView;
m_pBtnReset = new CButton;
m_pBtnStore = new CButton;
CSize size1(0,0);
SetScrollSizes(MM_TEXT,size1);
}
CWordView::~CWordView()
{
if(m_pEditCode != NULL)
{
delete m_pEditCode;
m_pEditCode = NULL;
}
if(m_pEditWord != NULL)
{
delete m_pEditWord;
m_pEditWord = NULL;
}
if(m_pStaicCode != NULL)
{
delete m_pStaicCode ;
m_pStaicCode = NULL;
}
if(m_pStaicWord != NULL)
{
delete m_pStaicWord;
m_pStaicWord = NULL;
}
if(m_pBtnStore != NULL)
{
delete m_pBtnStore;
m_pBtnStore = NULL;
}
if(m_pBtnReset != NULL)
{
delete m_pBtnReset;
m_pBtnReset = NULL;
}
if(m_pZoomView != NULL)
{
delete m_pZoomView;
m_pZoomView = NULL;
}
}
这块不知道为啥有问题 就是在关闭单文档的时候 出现会挂在CWordView的析构函数里的 delete m_pZoomView这句 提示“Unhandled exception in at 0X00F6AB72 in test.exe : 0XC000005:Acess violation reading location 0xfeefef2”
如果删除了这句话就没有问题
还有 在这个m_pZoomView里面申请了一个图像的内存 但是在m_pZoomView的析构函数里面已经delete了
请问为啥这个样子
10 个解决方案
#1
谢谢大侠了啊
#2
CZoomView的构造析构咋写的啊
#3
CZoomView::CZoomView()
{
m_fScale = 1.0;
m_pWordImg = new CRawImage;
}
CZoomView::~CZoomView()
{
if(m_pWordImg != NULL)
{
delete m_pWordImg;
m_pWordImg = NULL;
}
}
#4
在你的CZoomView这个类中,所有new过的地方的类释放时打断点调试下,CRawImage类里面应该还有new的地方,看是哪个地方出现指针异常的地方
#5
把CZoomView类中的m_pWordImg初始化为NULL式式。
#6
拿汽车打比方的话,C++类似于手动挡虽然省油但对你的操作有一定要求,.net java 类似于自动挡虽费油但易于操作,所以既然用c++你就要对它所涉及的资源要有全盘的考虑,你不能用操作自动挡汽车的方式操作手动挡汽车
#7
CRawImage类是你写的么,这个类的析构拿上来看看。或者你自己一层一层的调试下去看看。
#8
Unhandled exception in at 0X00F6AB72 in test.exe : 0XC000005:Acess violation reading location 0xfeefef2
看错误提示,大致意思是你访问了一块不属于你的内存
这块内存在之前已经被释放掉了,但你没有把 m_pZoomView 置为 NULL
如果一段内存中的值为 0xfeeefeee,那就是已经被释放掉的内存
你再访问它就会出错
看错误提示,大致意思是你访问了一块不属于你的内存
这块内存在之前已经被释放掉了,但你没有把 m_pZoomView 置为 NULL
如果一段内存中的值为 0xfeeefeee,那就是已经被释放掉的内存
你再访问它就会出错
#9
看一下你的程序是不是在某个地方把 m_pZoomView 删除了而不知道
还有一个问题就是,mfc debug 模式下的内存,是按“块”来管理的
一个块中有可能不止一段内存
那么会不会是你在删除另外一段内存的时候,没有把内存的长度控制好,把存放 m_pZoomView 的那块内存也一并删除了
还有一个问题就是,mfc debug 模式下的内存,是按“块”来管理的
一个块中有可能不止一段内存
那么会不会是你在删除另外一段内存的时候,没有把内存的长度控制好,把存放 m_pZoomView 的那块内存也一并删除了
#10
不是我写的 是个开源的静态库
#1
谢谢大侠了啊
#2
CZoomView的构造析构咋写的啊
#3
CZoomView::CZoomView()
{
m_fScale = 1.0;
m_pWordImg = new CRawImage;
}
CZoomView::~CZoomView()
{
if(m_pWordImg != NULL)
{
delete m_pWordImg;
m_pWordImg = NULL;
}
}
#4
在你的CZoomView这个类中,所有new过的地方的类释放时打断点调试下,CRawImage类里面应该还有new的地方,看是哪个地方出现指针异常的地方
#5
把CZoomView类中的m_pWordImg初始化为NULL式式。
#6
拿汽车打比方的话,C++类似于手动挡虽然省油但对你的操作有一定要求,.net java 类似于自动挡虽费油但易于操作,所以既然用c++你就要对它所涉及的资源要有全盘的考虑,你不能用操作自动挡汽车的方式操作手动挡汽车
#7
CRawImage类是你写的么,这个类的析构拿上来看看。或者你自己一层一层的调试下去看看。
#8
Unhandled exception in at 0X00F6AB72 in test.exe : 0XC000005:Acess violation reading location 0xfeefef2
看错误提示,大致意思是你访问了一块不属于你的内存
这块内存在之前已经被释放掉了,但你没有把 m_pZoomView 置为 NULL
如果一段内存中的值为 0xfeeefeee,那就是已经被释放掉的内存
你再访问它就会出错
看错误提示,大致意思是你访问了一块不属于你的内存
这块内存在之前已经被释放掉了,但你没有把 m_pZoomView 置为 NULL
如果一段内存中的值为 0xfeeefeee,那就是已经被释放掉的内存
你再访问它就会出错
#9
看一下你的程序是不是在某个地方把 m_pZoomView 删除了而不知道
还有一个问题就是,mfc debug 模式下的内存,是按“块”来管理的
一个块中有可能不止一段内存
那么会不会是你在删除另外一段内存的时候,没有把内存的长度控制好,把存放 m_pZoomView 的那块内存也一并删除了
还有一个问题就是,mfc debug 模式下的内存,是按“块”来管理的
一个块中有可能不止一段内存
那么会不会是你在删除另外一段内存的时候,没有把内存的长度控制好,把存放 m_pZoomView 的那块内存也一并删除了
#10
不是我写的 是个开源的静态库