Zugriffsverletzung bei fclose(*FILE)



  • Dateien in Form von FILE* gehören zu C und nicht zu C++, d.h. du bist im falschen
    Sub-Forum, hier wird mit fstream, usw. gearbeitet.
    😉



  • LordJaxom schrieb:

    Abstürze in fclose deuten (wenn der stream-Zeiger gültig und nicht NULL ist natürlich) allermeistens darauf hin dass Du Dir irgendwo anders (unter Umständen lange vorher) den Speicher kaputtgeschrieben hast.

    Hm, und was wären so typische Beispiele wie man den Speicher kaputtschreiben kann ? Ich finde das wie gesagt ziemlich komisch, dass das Programm ne Stunde lang dasselbe macht und irgendwann ist dann wie's aussieht der Speicher hinüber.

    AberHallo schrieb:

    Dateien in Form von FILE* gehören zu C und nicht zu C++, d.h. du bist im falschen
    Sub-Forum, hier wird mit fstream, usw. gearbeitet.
    😉

    Oops 🙄



  • Buffer Overflow

    char* quelle = "dreizehn byte";
    char ziel[10];
    
    strcpy (ziel, quelle);
    

    Hier wird z.B. über die Grenze von Ziel geschrieben.

    Kann auch sein, dass du Speicher löschst, aber dann einen Pointer auf diesen Speicherbereich verwendest.



  • Hm, typisches Beispiel?

    char text[100];
    text[100] = '\0';
    

    Analog mit new, malloc, und in tausend Variationen 😉

    Tipp: Ein Memory Debugger wie valgrind (weiss ja nicht auf was für ner Plattform Du Dich bewegst) spürt sowas auf wenn es passiert, nicht erst wenn sich die Auswirkung zeigt.



  • Hm, aber ich hab doch nur fopen(), fclose() und ab und zu n fprintf() dazwischen.



  • Dein Programm muss doch sonst noch irgendetwas machen?!

    if (stream)  // ist aber glaube ich nicht nötig
    	fclose (stream);
    


  • ja schon, aber wichtig ist doch nur das was mit "stream"(FILE*) arbeitet oder ?
    Könnte es vielleicht Probleme verursachen wenn man tausendmal fopen=... und fclose() macht ohne dass dazwischen ein fprintf() steht ?



  • Kone schrieb:

    ja schon, aber wichtig ist doch nur das was mit "stream"(FILE*) arbeitet oder ?
    Könnte es vielleicht Probleme verursachen wenn man tausendmal fopen=... und fclose() macht ohne dass dazwischen ein fprintf() steht ?

    Andere Programmteile haben ebenfalls Zugriff auf den gesamten Speicherbereich und können somit bei Programmfehlern auch überall Probleme verursachen.



  • Ok, so langsam komme ich dahinter. Mit Hilfe eines Memory Debuggers hab ich jetzt rausgefunden dass es einige Speicherlecks bei mir gibt 🙄 . Ich hab mehrere male ein free(*ptr) nach einem *ptr = malloc(...) vergessen.
    Ich hab jetzt den "Dauerbetrieb" noch nicht getestet, aber ich hoffe das war's.

    Danke für eure Geduld 🙂



  • Bei C++ benutzt man auch nicht mehr malloc und free 😛 (es sei denn man überläd new und delete global).


Anmelden zum Antworten