Fehlermeldung: "VisualStudio2012"; Debuggen -> Zugriffsverletzung beim Lesen an Position 0x00000000



  • Ich habe diesen Code von einer Vorlesung übernommen, der Dozent hat diesen Code über X-Code laufen lassen, bei ihm funktioniert es einwandfrei, bei mir kommt die Fehlermeldung im anschluss stürzt der Compiler ab 😞

    Mein Compiler führt bei mir bis Z.26 (einmal) aus danach kommt die Fehlermeldung und der Absturz.

    Kann mir jemand bitte helfen :(((

    struct S_Person {
    
    	char *vorname;
    	char *nachname;
    	int   alter;
    };
    
    // Pointer mit NULL initialisieren
    
    void kunde_init(S_Person &kunde) {
    	kunde.vorname  = NULL;
    	kunde.nachname = NULL;
    	kunde.alter    = 0;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    int x=0;
    
    	cout << "Wievele Kunden moechten Sie einlesen? ";
    	cin  >> x;
    
    	S_Person *kunde = new S_Person[x]; 
    
    	for (int i=0; i<x; i++) {
    		kunde_init(kunde[i]);
    		}
    

    Fehlermeldung nach Debugg-Start

    ⚠ "Unbehandelte Ausnahme bei 0x00F85A71 in dyn_speicher.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000"



  • 🙄 diese Dozenten immer...unglaublich.



  • ramazancinardere schrieb:

    Ich habe diesen Code von einer Vorlesung übernommen, der Dozent hat diesen Code über X-Code laufen lassen, bei ihm funktioniert es einwandfrei, bei mir kommt die Fehlermeldung im anschluss stürzt der Compiler ab 😞

    Dein Programm wird beendet, der Compiler hat da nix mehr mit zu tun.

    Anyway: Ist hässlich. Würde man nicht so machen. Erstmal scheint der Code aber nicht problematisch.
    Da kommen sicherlich noch ein oder zwei Zeilen, wo noch was anderes gemacht wird, z.B. Namen eingelesen und gespeichert in den S_Person Objekten von kunde .



  • Ich muss etwas korrigieren:

    Nach meinem Debug, wird nur einmal die Zeile 5 ausgedruckt, danach wird das Programm beendet!!!

    void kunde_ausgeben(S_Person &kunde) {
    
    	if (kunde.vorname == NULL || kunde.nachname == NULL) {
    
    		cout << "Diesen Kunden gibt es nocht nicht!!!" << endl;
    	}
    	cout << kunde.vorname << " " << kunde.nachname << " ist " << kunde.alter << " Jahre alt" << endl;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	int x=0;
    
    	cout << "Wievele Kunden moechten Sie einlesen? ";
    	cin  >> x;
    
    	S_Person *kunde = new S_Person[x]; 
    	//kunde = new S_Person[x];
    
    	for (int i=0; i<x; i++) {
    		kunde_init(kunde[i]);
    		}
    
    	for (int i=0; i<x; i++) {
    		kunde_ausgeben(kunde[i]);
    		}
    
    		/*** EINLESEN ***/
    	for (int i=0; i<x; i++) {
    		kunde_einlesen(kunde[i], i);
    		}
    	    /*** AUSGABE ***/
    	for (int i=0; i<x; i++) {
    		kunde_ausgeben(kunde[i]);
    		}
    
    	delete[] kunde;						 
    	system ("PAUSE");
    	return 0;
    }
    


  • ramazancinardere schrieb:

    Ich muss etwas korrigieren:

    Nach meinem Debug, wird nur einmal die Zeile 5 ausgedruckt, danach wird das Programm beendet!!!

    void kunde_ausgeben(S_Person &kunde) {
    
    	if (kunde.vorname == NULL || kunde.nachname == NULL) {
    	
    		cout << "Diesen Kunden gibt es nocht nicht!!!" << endl;
    	}
    	cout << kunde.vorname << " " << kunde.nachname << " ist " << kunde.alter << " Jahre alt" << endl;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	
    	int x=0;
    
    	cout << "Wievele Kunden moechten Sie einlesen? ";
    	cin  >> x;
    
    	S_Person *kunde = new S_Person[x]; 
    	//kunde = new S_Person[x];
    	
    	for (int i=0; i<x; i++) {
    		kunde_init(kunde[i]);
    		}
    
    	for (int i=0; i<x; i++) {
    		kunde_ausgeben(kunde[i]);
    		}
    
    		/*** EINLESEN ***/
    	for (int i=0; i<x; i++) {
    		kunde_einlesen(kunde[i], i);
    		}
    	    /*** AUSGABE ***/
    	for (int i=0; i<x; i++) {
    		kunde_ausgeben(kunde[i]);
    		}
    
    	delete[] kunde;						 
    	system ("PAUSE");
    	return 0;
    }
    

    In Zeile 26 kunde_ausgeben(kunde[i]); zeigen vorname und nachnahme noch auf Null -> BUMM
    Zeile 7 wird ausgeführt auch wenn vorname und name Null sind. da fehlt davor ein else.

    Was doziert der Dozent denn? C++ ist es auf jeden Fall schonmal nicht 😕


  • Mod

    Du kannst keinen Nullzeiger ausgeben. Manche Implementierungen (zumindest für C-Style printf) geben aber als "Feature" trotzdem so etwas wie "NULL" aus. Vielleicht nutzt dein Dozent so etwas, du aber nicht.

    Jedenfalls ist der Code schrecklich³ und ist wie eine Sammlung aller Arten und Weisen, wie man C++ nicht programmiert.



  • Evtl hast Du ein else vergessen?

    kunde_ausgeben(){
    if (kunde noch nicht eingegeben)
      Fehlermeldung ausgeben
    else
      kundendaten ausgeben
    }
    


  • ...



  • Furble Wurble schrieb:

    Evtl hast Du ein else vergessen?

    kunde_ausgeben(){
    if (kunde noch nicht eingegeben)
      Fehlermeldung ausgeben
    else
      kundendaten ausgeben
    }
    

    Ist mir echt peinlich, habe das ELSE vergessen... Super danke dir 👍 👍 👍


Anmelden zum Antworten