Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo Leute!

Mein Programm spinnt.

Wenn ich es starte und gleich wieder beende, geht alles klar.

Nachdem ich aber eine Funktion ausgeführt habe und dann beende, kommt folgende Meldung:

Debug Assertion Failed!

File: wincore.cpp

Line:1002

Und da steht: ASSERT(pMap->LookupPermanent(hWndOrig) == NULL);

Beendet wird mit CDialog::OnOK();

Meine Funktion:


void C...Dlg::OnBnClickedButton2...()

 {

  int Jobs=0;

  CString Pfad;


  Pfad=WorkingFolder;


  ofstream schreiben_jobs(Pfad+"\\[filename].bin", ios::out|ios::binary);


  ofstream schreiben_start(Pfad+"\\[filename].bin", ios::out|ios::binary);


  Jobs=m_cJobs.GetCount(); //ein Listenfeld


  for(int x=0; x<Jobs; x++)

   {

    m_cJobs.GetText(x, m_wJobs); //String des Listenindex wird ausgelesen


    m_cJobs.DeleteString(x); //String wird gelöscht


    int z=0;


    for(int y=4; y<=signed(strlen(m_wJobs)); y++)  //Ordnername aus String filtern

     {

      if(m_wJobs[y]==' '... m_wJobs[y+5]==' ')

       {

        QuellOrdner[z]='\0';


        z=y+6;


        y=signed(strlen(m_wJobs));

       }//end if(m_wJobs[y]...)      


      else

       {

        QuellOrdner[z]=m_wJobs[y];


        z++;

       }//end else by if(m_wJobs[y]...)

     }//end for(...)


    y=z;


    z=0;


    for(y; y<=signed(strlen(m_wJobs)); y++)  //Ordnername aus String filtern

     {

      if(m_wJobs[y]==' '... && m_wJobs[y+8]=='n')

       {

        ZielOrdner[z]='\0';


        y=signed(strlen(m_wJobs));

       }//end if(m_wJobs[y]==...)


      else

       {

        ZielOrdner[z]=m_wJobs[y];


        z++;

       }//end else by if(m_wJobs[y]==...)

     }//end for(...)


    schreiben_jobs <<QuellOrdner <<endl;


    schreiben_jobs <<ZielOrdner <<endl;

   }//end for(...)


  schreiben_jobs.close();


  schreiben_start <<'1' <<endl;


  schreiben_start.close();


  m_cAnmelden.EnableWindow(false); //Button wird deaktiviert

 }//end void C...Dlg::OnBnClickedButton2Anmelden()

Habt Ihr eine Idee woran das liegen könnte?

MS Visual C++ .Net, MFC, Dialogfeldbasierend, XP Prof.

Geschrieben

Es muss nicht daran liegen, aber es ist auf jeden Fall ein Fehler:

Wenn du in einer Schleife von 0 bis Anzahl-1 durch deine Listbox gehst und immer einen Eintrag entfernst, vergisst du dabei, dass durch das Entfernen die darunter liegenden Einträge nach oben rutschen.

Du bearbeitest also nur jeden zweiten Eintrag, und greifst noch dazu nach der Hälfte der Durchläufe mit ungültigen Indices auf die Listbox zu. Da du den Rückgabewert von GetText nicht abprüfst, bekommst du das nicht mal mit. Was dann im weiteren passiert, ist nicht vorauszusagen.

Also: Entweder immer mit Index 0 zugreifen, oder von hinten anfangen.

Geschrieben

Nein, daran liegt es nicht.

Ich habe die Zeile mit DeleteString() gelöscht, aber der Fehler blieb bestehen.

Und ich habe die Schleife rückwärts laufen lassen:

for(int x=Jobs-1; x>=0; x--) //Weil der erste Eintrag den Index 0 hat gleich -1

{

...;

}

Und ich habe die erste For-Schleife gelöscht. Und jetzt haut es hin.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...