tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
372
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Maxx03 Maxx03 ist offline Mitglied
    Registriert seit
    Jun 2007
    Beiträge
    11
    Hallo,

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

    Hier das Problem:
    Code cpp:
    1
    2
    3
    
     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.)
    Geändert von Maxx03 (02.07.07 um 13:13 Uhr)
     

  2. #2
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    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:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    
    string dateiname;
    cout<<"dateiname?";
    cin>>dateiname; 
     
    // ...
     
    laden(dateiname.c_str());
    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    Maxx03 Maxx03 ist offline Mitglied
    Registriert seit
    Jun 2007
    Beiträge
    11
    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

    Code cpp:
    1
    2
    
     
    char *array= new char[10];

    dann hätte ich dadurch auch speicher für 10 character reserviert oder ?
     

  4. #4
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Zitat Zitat von Maxx03 Beitrag anzeigen
    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:
    Code cpp:
    1
    2
    3
    4
    5
    
    char *array= new char[10]; 
     
    // ...
     
    delete [] array;
    Du könntest aber auch schreiben:
    Code cpp:
    1
    
    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
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

Ähnliche Themen

  1. VC6 Absturz
    Von sheel im Forum C/C++
    Antworten: 9
    Letzter Beitrag: 07.08.09, 19:13
  2. pc absturz
    Von kammscheibe im Forum Microsoft Windows
    Antworten: 15
    Letzter Beitrag: 05.01.09, 21:36
  3. Absturz der GUI
    Von taouri im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 22.11.06, 20:32
  4. VS-6-Absturz
    Von MortenV im Forum VisualStudio & MFC
    Antworten: 3
    Letzter Beitrag: 01.05.06, 21:29
  5. Absturz
    Von cordu im Forum Cinema 4D
    Antworten: 2
    Letzter Beitrag: 13.06.05, 09:21