Probleme mit Speicherverwaltung "Fehler: access violation"



  • Wenn ich meine Programm ausführe bekomme ich die Fehlermeldung
    Thread angehalten Speicherort\programmname.exe: Fehler:access violation at0x307407: write of address 0x0

    Wie kann ich verhindern, dass er auf die addresse 0x0 schreiben will?
    Ich denke ,dass das der Fehler ist

    Ich verwende C++ mit dem Borland compiler



  • Du hast anscheinend irgendwo einen Pointer der NULL ist. Wie sollen wir dir da helfen? Überprüf die Gültigkeit der Pointer mit if == NULL bevor du sie benutzt.



  • c_nachname1= new char[15];
    if(c_nachname1 == NULL || c_nachna == NULL) cout << "Speicherfehler\n";
    else
    {
    c_vorname1= new char[15];
    if(c_vorname1 == NULL || c_vorna == NULL) cout << "Speicherfehler\n";
    else
    {

    jetzt steht da immer "Speicherfehler"
    Wer hätte das gedacht!
    Leider bringt mich das nicht weiter



  • Tiny1984 schrieb:

    Wer hätte das gedacht!
    Leider bringt mich das nicht weiter

    Natürlich bringt dich das weiter. Du musst jetzt rausfinden, warum c_nachna oder c_vorna dort Null sind. Hast du einen Debugger?



  • Ja hab ich, aber entweder kann ich damit nicht umgehen oder er funktioniert nicht richtig!
    Immer bedenken ich lernen das gerade erst!

    was ist den an der deklarierung
    char *c_vorna;
    char *c_nachna;

    falsch
    oder muss ich was eingrenzen?!



  • Tiny1984 schrieb:

    was ist den an der deklarierung
    char *c_vorna;
    char *c_nachna;

    falsch

    Daran ist erstmal nichts "falsch". Es kommt darauf an, was du damit machst.



  • Für c_nachname1 hast du zwar Speicher angefordert, aber für c_nachna hast du nichts reserviert. Kein Wunder das c_nachna noch NULL ist. Der gleiche Fall bei c_vorna.



  • Hier einmal der "kompltte" Quellcode

    #include <conio.h>
    #include <iostream.h>
    #include <string.h>
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    void main()
    {
    
    	char *c_vorname1;
    	char *c_vorna;
    	char *c_nachname1;
    	char *c_nachna;
    	char start='j';
    
       cout<<"Moechten Sie einen Wert eingeben?:\n (j=Ja,n=Nein):";cin>>start;
       while (start=='j')
       {
       	//clrscr();
         	c_nachname1= new char[15];
       	if(c_nachname1 == NULL || c_nachna == NULL)cout << "Speicherfehler\n";
       	else
       	{
          	c_vorname1= new char[15];
             	if(c_vorname1 == NULL || c_vorna == NULL)  cout << "Speicherfehler\n";
             	else
               {        
    	    cout <<"\nVorname :";cin>>c_vorna;
                 cout <<"\nNachname:";cin>>c_nachna;
          		if ((strlen(c_vorna)<15) || (strlen(c_nachna)<15) )
          		{
    		  strcpy(c_vorname1,c_vorna);
                        strcpy(c_nachname1,c_nachna);
       cout<<"\n\nDer Name lautet: "<<c_vorname1<<" "<<c_nachname1<<"\nLaenge:"<<(1+(strlen(c_vorna))+(strlen(c_nachna)));
       		getch();
    
          cout<<"\n\nMoechten Sie einen weiteren Wert eingeben?:";cin>>start;
          			}
          			else
    
          			{
             			clrscr();
          	cout<<"Mehr als 15 Zeichen sind im Vornamen nicht erlaubt!";
                	  	}
             		}
              }
        }
        clrscr();
        cout<<"Das Programm wurde beendet!";
        getch();
    }
    

    Sorry für das durcheinander

    <edit>Bitte Code-Tags verwenden!</edit>



  • Da du in C++ programmierst, verwende lieber gleich std::string, anstatt char *, also z.B.

    // C++ Header ohne .h benutzen!!!
    #include <string>
    #include <iostream>
    
    // kanst aber auch "using namespace std;" schreiben
    using std::string;
    using std::cout;
    using std::cin;
    
    main()
    {
       string sVorname, sNachname;
    
       cout << "Vorname: ";
       cin >> sVorname;
    
       cout << "Nachname: ";
       cin >> sNachname;
    
       cout << "Du heißt " << sVorname << " " << sNachname;
    }
    


  • Guten Morgen

    warum bekomme ich eine Fehlermeldung wenn ich

    std::string Name;

    verwende und die Header Datei

    #include <string.h> //Fehlermeldung

    includiere anstatt

    #include <string> //keine Fehlermeldung

    Woran liegt das?
    Danke im voraus



  • Hallo !
    <string.h> ist eine C-Header-Datei, was du brauchst, sind C++-Header(-Dateien). C++-Standard-Header haben üblicherweise keine Dateinamenserweiterung/-endung.
    Hoffentlich hilft dir das.

    Mit freundlichen Grüßen

    Hallo-C++


Anmelden zum Antworten