cin>> ---> Absturz

Maxx03

Grünschnabel
Hallo,

Ich hab mal wieder ein Problem. Mir kommt dieses C++ manchmal willkürlich vor :D
Irgendwas was schon mal funktionierte funktioniert plötzlich nicht mehr, obwohl nichts geändert wurde.

Hier das Problem:
C++:
 char *dateiname;
 cout<<"dateiname?";
 cin>>dateiname;

Kopf und weiterern Code hab ich mal weggelassen. Den Abbruch verursacht die letzte Zeile
cin>>dateiname. Es gibt keinen Fehler beim Kompilieren aber Programm stürzt beim Ausführen ab:
Es erscheint die Ausgabe "dateiname?", wenn ich irgendetwas (hallo, "hallo", h,...) eingebe kommt der Windows Fehler
"Projekt.exe hat ein Problem festgestellt und muss beendet werden."

Und genau dieser Programmcode hat bisher funktioniert.

Ich hab auch identische #include Anweisungen (wobei hier sowieso keine gebraucht werden oder?)

Wenn ich aus char *dateiname ein int dateiname mache und eine zahl eingebe funktionierts....

(ich will dann später die variable dateiname an eine Funktion laden(char *dateiname) übergeben die mir eine Datei mit dem entsprechenen Namen öffnet.)
 
Zuletzt bearbeitet:
Hallo,

du deklarierst zwar einen char-Zeiger (*dateiname), reservierst aber keinen Speicher dafür. Dass es da dann einen Absturz gibt, ist eigentlich logisch. Mich wundert nur, das es schon mal funktioniert haben soll.

Warum machst du nicht sowas:
C++:
string dateiname;
cout<<"dateiname?";
cin>>dateiname; 

// ...

laden(dateiname.c_str());
Gruß
MCoder
 
Ok damit gehts. Danke. Ja komisch, aber es hat davor mal genau so funktioniert.

Das mit dem Speicherplatz reservieren hab ich leider nicht ganz verstanden (rookie). Ist das das mit malloc

wenn ich ein zeiger auf char so initialisieren würde

C++:
char *array= new char[10];

dann hätte ich dadurch auch speicher für 10 character reserviert oder ?
 
dann hätte ich dadurch auch speicher für 10 character reserviert oder ?
Genau so ist es.

Mit "new" reservierter Speicher muss nach Gebrauch wieder freigegeben werden, sonst gibt's Speicherlöcher:
C++:
char *array= new char[10]; 

// ...

delete [] array;
Du könntest aber auch schreiben:
C++:
char array[10];
Damit wird der Speicher auf dem lokale Stack angelegt und man braucht sich nicht um's Aufräumen zu kümmern.

Gruß
MCoder
 
Zurück