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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...