2011-08-20 5 views
0

J'ai créé un programme dans Visual Studio 2008 en utilisant le langage C++ et les fichiers MFC. C'est une interface utilisateur graphique qui stocke les enregistrements d'étudiants dans un fichier en utilisant la gestion de fichiers C++. Il fonctionne correctement et affiche ou ajoute des enregistrements, mais lorsque j'essaie de modifier et de supprimer des enregistrements, il me donne une erreur d'assertion en cours d'exécution.Erreur d'assertion lors de l'exécution du programme

S'il vous plaît aidez-moi.

Le code de fonction que j'utilise pour modifier et supprimer des enregistrements est ici.

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); 
    } 
} 
+0

Que dit l'erreur d'assertion! En regardant le code, je peux voir une erreur de logique dans delrec mais rien qui causerait une erreur d'assertion. – john

+0

La réponse semble être dans le code non affiché. –

+0

Je vais coller tout le code du programme dès maintenant si vous dites ou il était utile de parler de l'erreur – sam

Répondre

9

Vous semblez avoir enlevé un ou plusieurs contrôles de la ressource de dialogue et DoDataExchange est encore de les renvoyer (via l'une des fonctions de DDX_Control). Découvrez ce que sont ces ressources et supprimez leurs références de DoDataExchange. Plus tard, vous pouvez supprimer ces ID de contrôle (IDC_) de resource.h si elles sont non utilisées par d'autres boîtes de dialogue dans votre projet.

Pour connaître les ID de ressources inutilisés ne:

  • Aller à la ressource Voir
  • Sélectionnez le fichier .rc approprié
  • clic droit et cliquez sur Resource Symbols..
  • Dans la boîte de dialogue, trouver les ID inutilisés (ne pas les vérifier) ​​
+1

+1 pour la persévérance. – john

+0

Merci beaucoup. Tu as sauvé mon temps. Finalement, j'ai corrigé le bug –

Questions connexes