运行程序时出现断言错误

时间:2011-08-20 17:31:27

标签: c++ visual-studio

我使用C ++语言和MFC文件在Visual Studio 2008中创建了一个程序。它是一个图形用户界面,使用C ++的文件处理将学生记录存储在文件中。它工作正常并显示或添加记录但是当我尝试修改和删除记录时,它会在运行时给我一个断言错误。

请帮帮我。

我用于修改和删除记录的函数代码在这里。

void modifyrec()
{
    Invalidate();

    bool found;

    struct student e;

    getname_dialog diag;
    if(diag.DoModal()==IDOK)
    {
        found = false;

        fp.SeekToBegin();

        while(fp.Read(&e,sizeof(e))>=sizeof(e))
        {
            if(e.batch_no==g_batchno && strcmp(e.name,g_name)==0)
            {
                found = true;
                break;
            }
        }

        if(found == true )
        {
            modify_dialog mdiag(e);
            mdiag.DoModal();
        }
        else
            MessageBox("Record Not Found","Modify Record....");
    }
}

void delrec()
{
    bool foun;
    struct student e;

    Invalidate();

    getname_dialog diag;
    if(diag.DoModal()==IDOK)
    {
        found = false;
        fp.SeekToBegin();

        CFile ft("temp.dat",CFile::modeCreate | CFile:modeWrite);
        while(fp.Read(&e,sizeof(e))>= sizeof(e))
        {
            if(e.batch_no==g_batchno && strcmp(e.name,g_name)==0)
            {
                found = true;
                break;
            }
        }

        if(found == true )
        {
            modify_dialog mdiag(e);
            mdiag.DoModal();
        }
        else
            MessageBox("Record Not Found","Delete Record....");


        fp.Close();
        ft.Close();

        CFile::Remove("students.dat");
        CFile::Rename("temp.dat","student.dat");
        fp.Open("students.dat",CFile::modeCreate |CFile::modeNoTruncate |CFile::modeReadWrite);
    }
}

1 个答案:

答案 0 :(得分:9)

您似乎已从对话框资源中删除了一个或多个控件,DoDataExchange仍在引用它们(通过一个DDX_Control函数)。找出这些资源是什么,并从DoDataExchange中删除它们的引用。

稍后,如果项目中的其他对话框未使用,则可以从resource.h中删除这些控件ID(IDC_)。

要查找未使用的资源ID,请执行以下操作:

  • 转到资源视图
  • 选择适当的.RC文件
  • 右键单击并点击Resource Symbols..
  • 在对话框中,找出未使用的ID(没有检查)