MFC程序出现断点,找不到错误

MFC断点问题。
我的项目里需要根据下拉列表的数字设置EDIT控件的可用数,当我选择2-8时软件运行没问题,当我选择久,运行出现断点。下面是我的代码


void CXxh::OnCbnSelchangeCombo1()
{
    // TODO: 在此添加控件通知处理程序代码
    int n_jzds = m_xxhjzds.GetCurSel() + 2;
    
    for (int i = 0; i < n_jzds; i++)
    {
        GetDlgItem(IDC_EDIT_CGQZ1 + i)->EnableWindow(FALSE);
    }
    
    GetDlgItem(IDC_EDIT2)->EnableWindow(TRUE);
    GetDlgItem(IDC_EDIT3)->EnableWindow(TRUE);
    GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
}

img


检查了editID也是没有错误
调用堆栈里有这个

img


这里是我的运行截图

img

这种一般for循环里GetDlgItem的参数越界了,返回是NULL,所以他调用EnableWindow的偏移量地址很小。

引用 皆我百晓生 小程序回复内容作答:

根据你提供的代码,可能的错误原因如下:

  1. 未正确初始化m_xxhjzds控件:请检查是否正确设置了m_xxhjzds控件的变量。可能是没有使用DDX_Control或者手动创建和初始化变量。
  2. IDC_EDIT_CGQZ1和IDC_EDIT2等控件不存在:请检查是否正确设置了这些控件的ID,并确保它们存在于对应的资源文件中。
  3. n_jzds的值超出了可用的控件范围:请确保n_jzds的值在合理范围内,不要超出实际存在的控件数量。
  4. EnableWindow函数可能引发了断点:在某些特殊情况下,EnableWindow函数可能会导致断点,可以尝试添加一些错误检查代码并查看是否引发了断点。

除了代码错误外,还可能是由于其他原因导致断点出现,例如内存错误、访问无效指针等。可以在断点触发时查看调试器提供的详细错误信息,以便更好地定位问题的根源。另外,你可以尝试在代码中添加一些调试输出语句,通过打印调试信息来进一步排查问题。

最后,如果问题仍然存在,建议你提供更多的细节信息,例如具体的断点位置、断点触发时的调试器信息等,以便更好地帮助你解决问题。

n_jzds里+2越界了吧?去掉试试

【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^