Zugriffsverletzung...



  • Tach ma wieder!

    Also nachdem ich mittlerweilen für alle andern Probleme ne lösung hab tut sich ein neues auf... Diesmal aber irgendwie etwas komplizierter weil das Programm nicht nur nicht das macht was man ihm sagt sondern eine Fehlermeldung ausgibt

    "Im Projekt blablabla ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung : 'Zugriffsverletzung bei Adresse 0040246E. Lesen von Adress FFFFFFF5'. Prozess wurde Angehalten. Mit Einzelne Anweisung oder Start fortsetzen."

    Folgender Code:

    #include <iostream.h>
    #include <string.h>
    
    int main ()
    
    {
    
    string str_name[6][2];
    char cback;
    int izahlen;
    int loop = 0;
    int izahl;
    do
    {
    //Menue------------------------------------------
         int menue;
    
         cout<<"Was wollen sie tun?"<<endl;
         cout<<"\nNamen Eingeben <1>";
         cout<<"\nNamen auslesen <2>"<<endl;
         cout<<"loeschen <3>"<<endl;
         cout<<"suchen <4>"<<endl;
         cout<<"Programm beenden <5>"<<endl;
         cin>>menue,str_name[loop][1];
    
             switch(menue)
    
                {
    
                  case 1: cback = ' ';
                          for (loop = 0 ;loop <=5; loop++)
                           {
                          if (str_name[loop][0] == "")
                                {
                                 cout<<"Bitte geben sie hier ihren Vornamen ein:\n";
                                 cin>>str_name[loop][0];
                                 cout<<"Bitte geben sie hier ihren Nachnamen ein:\n";
                                 cin>>str_name[loop][1];
                                 cout<<endl;
                                 cout<<"Wollen sie zurueck ins Hauptmenue? <J/N>"<<endl;
                                 cin>>cback;
                                }
    
                              if (cback == 'j' || cback == 'J')
                              break;
                            }
                        break;
    
                  case 2: cout<<"Folgende Namen wurden schon eingelesen: "<<endl;
    
                          if (str_name[loop][0] != "")
                          {
                           for (loop = 0; loop <= 5; loop++)
                           {
                              if (str_name[loop][0]  != "")
                              {
                               cout<<str_name[loop][0] + ' ' + str_name[loop][1];
                               cout<<endl;
                              }
    
                           }
                          }
                          else if (str_name[loop][1] == "" || str_name[loop][1] == "2")
                          {
                           cout<<endl;
                           cout<<"es wurden noch keine Namen eingegeben";
                           cout<<endl;
                           cback = 'j';
                          }
                          cout<<endl;
                          break;
    
                  case 3:
                            cback = ' ';
                            cout<<"Welchen Namen wollen sie Löschen?"<<endl;
                            cout<<str_name[loop][0] + ' ' + str_name[loop][1];
                            cout<<endl;
    
                            cin>>izahl;
                            izahl--;
                            str_name[izahl][0]="";
                            str_name[izahl][1]="";
                            break;
    
                  case 4:
                  break;
    
                  case 5:
                  return 0;
    
                }
    
    }
    
    while (cback == 'J' || cback == 'j');
    
    getchar ();
    
    return 0;
    
    }
    

    das Problem tritt nur dann auf wenn ich case 3 aufrufe... aber wiederrum nur wenn ich vorher schon einmal case 2 aufgerufen habe... Nach der Fehlermeldung markiert er mir in der Datei String_r.h folgende zeile

    return __string_ref_rep<Allocator>::__refs_+1;
    

    Da ich noch nie mit so nem Problem zu tun hatte weiß ich weder was es hervorruft, noch wie ichs ändern kann..

    Ich hoff ihr könnt mir helfen!



  • Hi,

    was soll dein 'loop' sein ??
    Wie auch immer, da liegt der Fehler:
    loop ist - warum auch immer - global, wird in case 2 auf 6 gesetzt
    und stürzt dann natürlich in case 3 ab.

    Jockel



  • loop zählt doch nur die position im array hoch?! Damit er mir alle Daten im array ausgibt...



  • Aber danke du hast recht! Wenn ich am ende von case 2 loop wieder auf 0 setze dann gehts! danke!



  • Ich sehe gerade, dass ich fälschlicher Weise von 'global' gesprochen
    habe, was natürlich nicht korrekt war.
    Ändert aber nix am Problem:
    Nach der Schleife ist loop halt auf 6 und in deinem case 3 steht

    cout<<str_name[loop][0] + ' ' + str_name[loop][1];
    

    Was auch immer diese Zeile soll, loop ist hier = 6 und daher knallt's.

    Jockel



  • Diese Zeile gibt eigentlich nur die erste spalte und die zweite Spalte des Arrays aus... Sprich vor und dann Nachname

    Edit: ABer wo setzt er in case 2 bitte loop auf 6? 😕

    2.Edit: Ok, nach der schleife hast recht...



  • Oliabt schrieb:

    Diese Zeile gibt eigentlich nur die erste spalte und die zweite Spalte des Arrays aus... Sprich vor und dann Nachname

    Deshalb schreib doch direkt 0 statt loop, in der Hoffnung dass
    loop gerade 0 ist.


Anmelden zum Antworten