possible Memleak?
-
!= -1
denn open liefert -1 im Fehlerfall.
Und warum hier soviel getrollt wird würde mich auch mal interessieren. Ist ne wahnsinnig simple Frage...
-
Shade Of Mine schrieb:
!= -1
denn open liefert -1 im Fehlerfall.
Und warum hier soviel getrollt wird würde mich auch mal interessieren. Ist ne wahnsinnig simple Frage...
Laut OP geht es aber doch um fopen und nicht um open (was nicht einmal Teil vom C++-Standard ist). Wo siehst du da Getrolle? Entweder ist deine Antwort falsch oder seine Frage ist es.
-
Wie gesagt, meine Frage war möglicherweise etwas unpräzise. Mir ging es wirklich nur darum, ob das Tool zurecht meckert, wenn man > -1 schreibt statt != -1.
Sehe ich das jetzt also richtig, dass man ohne ein if(...) auch auskommt und falls nicht, != -1 besser ist als > -1?Edit: es geht um Linux
-
Ok .. nimm != -1.
-
Shade Of Mine schrieb:
Ist ne wahnsinnig simple Frage...
Erst wenn man die 3 nachgeschobenen Erklärungen gelesen hat oder auf den ersten Blick erkannt hat dass hier linux-spezifische Themen im Standard-C++ Forum angesprochen wurden und fd für "file descriptor" steht.
Aber der OP scheint ja erkannt zu haben dass man zukünftig besser gleich alle relevanten Infos gibt.
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
knivil schrieb:
fclose sollte auch bei einem 0 Zeiger funktionieren, so dass keine if-Abfrage noetig sein sollte.
Tut es nicht. fclose(0) verreckt gnadenlos.
-
dixidix schrieb:
Ist es eigentlich relevant ob man
if (fd > -1) close(fd);
oder
if (fd != -1) close(fd);
verwendet? Jedenfalls habe ich mal ein Checktool das mal testen lassen, welches die obere Version anmeckert.
Nur aus reiner Neugier, welches Checktool verwendest du?
Zusätzlich müsste dein Checktool auch die Tatsache anmekern, dass du den Rückgabewert von close nicht abfragst.
Richtig wäre:if (-1 != fd) { if (-1 == close(fd)) { /* Fehler beim Schließen */ ... } }
-
Ich verweise da mal am besten jetzt hier auf valgrind. Lass es mal damit durchlaufen, dein Programm. Wenn entsprechende Debugsymbole mit einkompilliert sind kann es dir sogar den Stacktrace samt Codezeile ausspucken wo der memleak passiert. Dann ist das meistens ein Ding von Minuten dass man das gefixed hat.
Sollte auf den meisten Distributionen im Paketmanager erhältlich sein.
-
Also ich würde die Spezifikation zur Hand nehmen und genau lesen. Wenn Du einen Dateideskriptor mit der Systemfunktion open erzeugt hast, dann liefert es entweder dein Dateideskriptor oder im Fehlerfall die -1 zurück. Dass -1 kein gültiger Dateideskriptor ist, ist hier implizit enthalten. Ob -2 ein gültiger Dateideskriptor ist, ist nicht spezifziert. Daher solltest Du genau auf -1 abfragen, wenn Du wissen willst, ob Deine Variable einen gültigen Deskriptor hält.
Daher gebe ich dem Tool recht, wenn er diese Empfehlung ausgibt.