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 0x0Wie kann ich verhindern, dass er auf die addresse 0x0 schreiben will?
Ich denke ,dass das der Fehler istIch 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 weiterNatü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++