一个除以0的异常,怎样解决?函数定义也有,求正解

kanchj 2012-08-10 10:58:43
RT,

调试的时候会出现这个“ 0x00d9f416 处有未经处理的异常: 0xC0000094: Integer division by zero
怎么解决?



以下是函数定义:


void CELDlg::autosize(UINT nID,LPRECT lpRect)  
{
CWnd *pWnd;
pWnd = GetDlgItem(nID); //获取控件句柄
if(!pWnd) return; //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建

CRect rect,recttemp; //定义rect为控件变化后的参数
GetClientRect(&recttemp); //recttemp获取变化后对话框客户区大小

//计算各个参数值,利用每个值主窗口的相对值计算
rect.left = recttemp.Width() * lpRect->left/m_rectmin.Width();
rect.right = recttemp.Width() * lpRect->right/m_rectmin.Width();
rect.top = recttemp.Height() * lpRect->top/m_rectmin.Height();
rect.bottom = recttemp.Height() * lpRect->bottom/m_rectmin.Height();

pWnd->MoveWindow(rect);//调整控件位置
}
...全文
639 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
卓喻创新 2015-03-06
  • 打赏
  • 举报
回复
使用SEH虽然能捕获异常,但是不管除数为0的情况出现在什么位置,提供的崩溃地址都一样0x3fd26e4,没办法使用map定位,不知怎么回事,同样求助啊?
MyLiveIsLost 2012-08-13
  • 打赏
  • 举报
回复
void CEBankDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

CRect rc;

CWnd *pWnd = GetDlgItem(IDC_STA);
if(pWnd && nType != 1)
{
for(int i=0; i < 5; ++i)
{
pWnd->GetWindowRect(&rc);
ScreenToClient(&rc);

if(m_ClienRc.Width() <= 0 || m_ClienRc.Height() <= 0)
{
pWnd->MoveWindow(rc);
pWnd = GetNextDlgGroupItem(pWnd);
}
else
{
rc.left = rc.left * cx / m_ClienRc.Width();
rc.right= rc.right* cx / m_ClienRc.Width();
rc.top = rc.top * cy / m_ClienRc.Height();
rc.bottom=rc.bottom*cy / m_ClienRc.Height();

pWnd->MoveWindow(rc);
pWnd = GetNextDlgGroupItem(pWnd);
}
}
}
GetClientRect(&m_ClienRc);
Invalidate(TRUE);
}
冷饭村 2012-08-11
  • 打赏
  • 举报
回复
如果为0,则赋值为1。
kanchj 2012-08-11
  • 打赏
  • 举报
回复
那你们把我提供的这个函数修改下,避免出现除以0的异常
Eleven 2012-08-11
  • 打赏
  • 举报
回复
__try{}__except()
用户 昵称 2012-08-11
  • 打赏
  • 举报
回复
判断,一定可以。
xiaohuh421 2012-08-11
  • 打赏
  • 举报
回复
除数为0判断,是基本的东西吧.
程序中的每个除数,都要处理 其为0的可能性.
可以强制改为一个合法的数,或者函数直接返回.
也可返回一个自己的异常.

一般我是这么处理;
int iWidth = m_rectmin.Width();
if(iWidth==0) iWidth = 1;
看不见的裂痕 2012-08-11
  • 打赏
  • 举报
回复
这怎么可能不行?楼主你说下你的逻辑吧。
kanchj 2012-08-10
  • 打赏
  • 举报
回复
楼上不行,我试过了
看不见的裂痕 2012-08-10
  • 打赏
  • 举报
回复
做除数的之前都判断
if(0 == m_rectmin.Width())

//异常处理代码

else

rect.left = recttemp.Width() * lpRect->left/m_rectmin.Width();

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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