关于非模式对话框异常!
关于非模式对话框错误!!!
这个函数我是想实现同时显示多个对话框,点第一次的时候时候正确运行,第二次就出错了,求解答啊!(之前我实现一直能正常运行,现在不知道为什么就出错了)
出错输出:First-chance exception in Image.exe (MFC42D.DLL): 0xC0000005: Access Violation.
对话框显示:Unhandled exception in Image.exe (MFC42D.DLL): 0xC0000005: Access Violation.
------解决方案--------------------
你的窗口new出来之后不delete?
还有窗口资源你释放了没有?
比如重复创建就会报错,你下个断点看看是在哪儿出的问题
------解决方案--------------------
先看出错的地方,应该是指针没有处理好
------解决方案--------------------
你调试一下 看看错在哪里
------解决方案--------------------
从报错信息看到是MFC42D.DLL模块里异常
即是说不是CImageDlg::OnFanse()里的指针异常
感觉着3个函数有问题
Show->GetHuiDuInfo
Show->GetWindowTitle //特别是这个,是SetWindowTitle ??
Show->GetAddr
按照命名习惯,Get开头的函数都是获取数据的
如果Show->GetWindowTitle内部是调用GetWindowText,传进的是常量区内存,就会包非法访问了
其它两个类似
MFC封装了这些函数,在MFC42D.DLL里出现异常,那上述问题就比较吻合。
------解决方案--------------------
------解决方案--------------------
你要这么说那就不好判断了
------解决方案--------------------
1.是VC6.0的话,先删除.ncb文件,rebuild all,看看是不是编译器的BUG
2.恢复到之前的代码,看看两者的区别在哪里
3.如果不能恢复到之前的代码,则屏蔽一些认为可能出错的代码,找到出错原因
------解决方案--------------------
Debug下打开call stack,看函数调用堆栈~
------解决方案--------------------
ClearMemory() 怎么写的?
------解决方案--------------------
Show->GetHuiDuInfo(ZF);
Show->GetWindowTitle("反色变换");
Show->GetAddr(ZengQiang.GetData(),ZengQiang.GetWidth(),ZengQiang.GetHeight(),ZengQiang.GetInfo());
这三句都屏蔽试下,如果是OK的,再挨个屏蔽,先确定是哪句问题
------解决方案--------------------
可能的话,还是上传整个工程吧
猜猜下不是办法
这个函数我是想实现同时显示多个对话框,点第一次的时候时候正确运行,第二次就出错了,求解答啊!(之前我实现一直能正常运行,现在不知道为什么就出错了)
出错输出:First-chance exception in Image.exe (MFC42D.DLL): 0xC0000005: Access Violation.
对话框显示:Unhandled exception in Image.exe (MFC42D.DLL): 0xC0000005: Access Violation.
- C/C++ code
void CImageDlg::OnFanse() { ClearMemory(); ZengQiang.FanSeBianHuan(); ZengQiang.ZhiFangTu(ZF,0); CShowImage *Show=new CShowImage; Show->Create(IDD_DIALOG_SHOW,NULL); Show->GetHuiDuInfo(ZF); Show->GetWindowTitle("反色变换"); Show->GetAddr(ZengQiang.GetData(),ZengQiang.GetWidth(),ZengQiang.GetHeight(),ZengQiang.GetInfo()); Show->ShowWindow(SW_SHOW); // Show=NULL;// TODO: Add your command handler code here }
------解决方案--------------------
你的窗口new出来之后不delete?
还有窗口资源你释放了没有?
比如重复创建就会报错,你下个断点看看是在哪儿出的问题
------解决方案--------------------
先看出错的地方,应该是指针没有处理好
------解决方案--------------------
你调试一下 看看错在哪里
------解决方案--------------------
从报错信息看到是MFC42D.DLL模块里异常
即是说不是CImageDlg::OnFanse()里的指针异常
感觉着3个函数有问题
Show->GetHuiDuInfo
Show->GetWindowTitle //特别是这个,是SetWindowTitle ??
Show->GetAddr
按照命名习惯,Get开头的函数都是获取数据的
如果Show->GetWindowTitle内部是调用GetWindowText,传进的是常量区内存,就会包非法访问了
其它两个类似
MFC封装了这些函数,在MFC42D.DLL里出现异常,那上述问题就比较吻合。
------解决方案--------------------
------解决方案--------------------
你要这么说那就不好判断了
------解决方案--------------------
1.是VC6.0的话,先删除.ncb文件,rebuild all,看看是不是编译器的BUG
2.恢复到之前的代码,看看两者的区别在哪里
3.如果不能恢复到之前的代码,则屏蔽一些认为可能出错的代码,找到出错原因
------解决方案--------------------
Debug下打开call stack,看函数调用堆栈~
------解决方案--------------------
ClearMemory() 怎么写的?
------解决方案--------------------
Show->GetHuiDuInfo(ZF);
Show->GetWindowTitle("反色变换");
Show->GetAddr(ZengQiang.GetData(),ZengQiang.GetWidth(),ZengQiang.GetHeight(),ZengQiang.GetInfo());
这三句都屏蔽试下,如果是OK的,再挨个屏蔽,先确定是哪句问题
------解决方案--------------------
可能的话,还是上传整个工程吧
猜猜下不是办法