紧急求救!恳请高人救救我!(一个莫名其妙的异常)不胜感激!!!!

smallBridge 2001-06-27 09:44:39
我在一个对话框的按钮CLICK事件中调用另外一个对话框,如果该对话框返回值为IDOK,则返回该对话框中一个文本框的值,比如“姓名”,值倒是返回了,问题是执行这样的过程后,在退出程序时,总是出现一个异常对话框,但是如果被调用对话框的返回值为IDCANCEL时,则没有异常,清问这是什么原因?是否得释放被对话框中的某些资源什么的?请施予援手,不胜感激!!!!
...全文
253 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
smallBridge 2001-06-27
  • 打赏
  • 举报
回复
up
z_sky 2001-06-27
  • 打赏
  • 举报
回复
to wolf721():
"GetDlgItem(IDC_EDITFEIOTHER)->SetWindowText(str);"取的是"CBarCode::OnBTNDETAILOther"所在的dialog中的IDC_EDITFEIOTHER,跟"CTollDetailMed dlg;"没关系了。
smallBridge 2001-06-27
  • 打赏
  • 举报
回复
up
wolf721 2001-06-27
  • 打赏
  • 举报
回复
还是wang_xiao_jian(崦嵫) 说的对。
wolf721 2001-06-27
  • 打赏
  • 举报
回复
估计是GetDlgItem(IDC_EDITFEIOTHER)->SetWindowText(str);出问题了。对话框资源都已经释放了,你又去取,当然要弹出那个恐怖对话框了。
z_sky 2001-06-27
  • 打赏
  • 举报
回复
楼上的, if 中已经return了,所以是一样的 :-)
wolf721 2001-06-27
  • 打赏
  • 举报
回复
try follow codes:
void CBarCode::OnBTNDETAILOther()
{
// TODO: Add your control notification handler code here
CTollDetailMed dlg;
if (dlg.DoModal==IDCANCEL)
{
lngOtherCode = 0;
dblOtherPrice = 0.0;
lngOtherNum = 0;

//delete dlg;
return;
}
else
{
lngOtherCode = dlg.m_iCode;
dblOtherPrice = dlg.m_fltPrice;
lngOtherNum = dlg.m_iNum;
m_dblFeiOther = (double)dlg.m_fltSumFee;

CString str;
//str.Format("%.2f",dblXiYaoPrice);
str.Format("%.2f",m_dblFeiOther);
//AfxMessageBox(str);
GetDlgItem(IDC_EDITFEIOTHER)->SetWindowText(str);
//delete dlg;
}
}

Sunny_lin 2001-06-27
  • 打赏
  • 举报
回复
错误:
CTollDetailMed dlg
之后,在函数返回后,该dlg变量就会自动释放,你不需要Delete dlg的操作。

再次强调:
在OnBTNDETAILOther函数中,dlg变量一直有效,直到该函数返回,
如果你在函数返回后还想用dlg中的变量,你需要保存你需要的变量!!!
z_sky 2001-06-27
  • 打赏
  • 举报
回复
在代码行上设置断点,不要trace into mfc的函数。另外程序非法出错,可能会停在不对应代码行的汇编指令上,你应该注意是在执行哪一行代码行后出现的,再仔细分析当时的处理和调用情况,看问题在哪里。汇编窗口可以关闭掉。
smallBridge 2001-06-27
  • 打赏
  • 举报
回复
up!
smallBridge 2001-06-27
  • 打赏
  • 举报
回复
to: z_sky

非常感谢您的帮助,我想请教您DEBUG时,如何如何让在代码行上调试,而不是在汇编码中调试呢?非常非常谢谢!
z_sky 2001-06-27
  • 打赏
  • 举报
回复
debug一下吧,弄清楚问题出在什么地方。肯定是访问了一个没有创建或已销毁的变量。
smallBridge 2001-06-27
  • 打赏
  • 举报
回复
还有一个问题,我的程序是 由CPROPERTYPAGE组成的,在我切换到某个页面后,不做任何操作,退出程序,总会出现异常
"0x004690ff"指令引用的"0x00000005"内存,该内存不能"read"

这是什么原因呢?
z_sky 2001-06-27
  • 打赏
  • 举报
回复
因为那时控制ClistBox已经被destroy了
z_sky 2001-06-27
  • 打赏
  • 举报
回复
1、在CTollDetailMed类中增加一个成员char *m_p; 在构造函数增加一个参数;
CTollDetailMed::CTollDetailMed(char *p){m_p=p;...};
2、将
void CBarCode::OnBTNDETAILOther()
{
// TODO: Add your control notification handler code here
CTollDetailMed dlg;
int ret = dlg.DoModal();
改为
void CBarCode::OnBTNDETAILOther()
{
// TODO: Add your control notification handler code here
char buff[100];
CTollDetailMed dlg(&buff);
int ret = dlg.DoModal();
....
}
3、在CTollDetailMed的OnOK();中将需要保存得值 copy到*m_p中(有多项可以存放在*m_p中不同的位置或按一定的分割符串起来,也可以定义一个结构传递给CTollDetailMed);

smallBridge 2001-06-27
  • 打赏
  • 举报
回复
help!!!!!
smallBridge 2001-06-27
  • 打赏
  • 举报
回复
还有为什么我给一个控制ClistBox定义一个变量时,也会有异常发生,我都快崩溃了!
smallBridge 2001-06-27
  • 打赏
  • 举报
回复
to:z_sky()
能不能贴点代码,我是一个VC新手,好多东西都不清楚如何实现,真是丢人!非常感谢!
zygapi 2001-06-27
  • 打赏
  • 举报
回复
上面的老兄,说的对。把文本框的数据放到数据成员中去。
plato 2001-06-27
  • 打赏
  • 举报
回复
z_sky猜得有理,不过还是贴出来更加清楚
加载更多回复(5)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧