Wieso kommt es bei fclose zum Speicherfehler ?



  • Nun, wenn FPquelle =NULL ist schon. Da C keine exceptions kennt, was soll fclose dann sonst machen?

    try it:

    #include <stdio.h>
    
    int main()
    {
        FILE *a;
    
        a=NULL; // das gleiche als wenn fopen null returnt
    
        printf("hallo Welt\n");
        fclose(a);
    
        printf("This text will never be shown\n");
    
        return 0;
    }
    


  • Original erstellt von xroads42:
    **Nun, wenn FPquelle =NULL ist schon. Da C keine exceptions kennt, was soll fclose dann sonst machen?
    **

    Eben, ich widerspreche ja auch nur Dawai 🙂

    FPquelle ist wohl dann NULL, wenn wie du schon sagtest, fopen scheitert. @Ita12_Rafael: du solltest mal eine Fehlerbehandlung in dein Programm bauen 🙂



  • Und warum prüft fclose nicht intern auf NULL und macht dann nichts? Das ist doch blöd, wenn das Ding abstürzt.



  • Original erstellt von TriPhoenix:
    **Eben, ich widerspreche ja auch nur Dawai 🙂

    FPquelle ist wohl dann NULL, wenn wie du schon sagtest, fopen scheitert. @Ita12_Rafael: du solltest mal eine Fehlerbehandlung in dein Programm bauen :)**

    ot:
    @TriPhoenix: war auch keine antwort auf dein beitrag(sondern auf <Dawai> )...mußte erst mal meinen Complier suchen 🙄



  • Was soll das, das ihr alle auf mir rumhackt? 😡 😡
    Mein Beitrag war anscheinend falsch, aber kann man das nicht vernünftig sagen, anstatt hier sofort mit Beleidigungen auf mich loszugehen? 😞



  • Ruhig Brauner, ruhig. Niemand hat Dich beleidigt...



  • Original erstellt von <Helge>:
    Und warum prüft fclose nicht intern auf NULL und macht dann nichts? Das ist doch blöd, wenn das Ding abstürzt.

    Vermutung:
    Weil fclose nicht weiß warum der übergebene Pointer NULL ist, und wie es dann reagieren soll. Nichts tun ist nicht wircklich eine lösung. Was ist wenn der nutzer nur ausversehn den Pointer auf null gesetzt hat, und denkt die Datei, die er eigentlich schließen wollte, nicht geschlossen wird? Am ende des Programms sind im schlimmsten fall alle Daten futsch ( stichwort Streams und Puffer). Da ist ein absturz in der Testphase wohl doch besser.

    Und ein

    if(pFile==NULL)
          do_something();
    

    Ist ja kein beinbruch.

    edit: Sch*** rechtschreibfehler...

    [ Dieser Beitrag wurde am 21.01.2003 um 20:31 Uhr von xroads42 editiert. ]



  • fopen scheiterte schon und deshalb funzte auch fclose nicht .

    Danke für die Antworten



  • Original erstellt von <Dawai>:
    Was soll das, das ihr alle auf mir rumhackt? 😡 😡
    Mein Beitrag war anscheinend falsch, aber kann man das nicht vernünftig sagen, anstatt hier sofort mit Beleidigungen auf mich loszugehen? 😞

    Heyhey...beleidigen woltle ich hier keinen (hab ich auch nicht)...ich finde ich habe recvht vernünftig gesprochen 🙂

    Original erstellt von <Helge>:
    Und warum prüft fclose nicht intern auf NULL und macht dann nichts? Das ist doch blöd, wenn das Ding abstürzt.

    Naja zum einen ists halt ne Userbibliothek, die auf den Zeuger zugreift. Und selbst wenn, was soll fclose davon dann halten...stillschweigen ist keine vernünftige Fehleranzeige und ein Rückgabewert bringts auch nicht, weil wenn fclose erst den fehler meldet ist vorher ja shcon alles schiefgegangen. Die Fehlerbehandlung muss nunmal (leider) der User schrieben 🙂



  • warum soll ich in fclose die kosten eines ifs tragen? es kann sowieso keine ungültigen Dateizeiger geben, da ich mindestens einmal lese oder schreibe (sonst öffne ich die datei ja nicht) - dadurch stürtzt das Programm sowieso schon vorher ab, bzw. garnicht, weil man nunmal auf fehler überprüfen tut.


Anmelden zum Antworten