Ich entwickle ein Projekt in C, und ich muss den zugewiesenen Speicher freigeben und auch alle geöffneten Dateien schließen, bevor es beendet wird.Gibt es eine Möglichkeit, Speicher in atexit oder ähnlichem freizugeben, ohne globale Variablen zu verwenden?
Ich entschied mich, eine clean
Funktion zu implementieren, die all diese Sachen tun und es mit atexit
aufrufen wird, weil es viele mögliche Ausgangsszenarien gibt.
Das Problem ist, dass atexit
erlaubt mir nicht, Funktionen mit Parametern einzustellen, so kann ich nicht zu clean
die Zeiger senden, die am Ende des Prozesses freigegeben werden müssen.
Also muss ich als globale Variablen jeden Zeiger, der möglicherweise freigegeben werden muss, und jede Datei, die möglicherweise im Programm geöffnet bleiben? (Ich habe das schon gemacht, sieht aber nicht gut aus) oder existiert eine ähnliche Funktion wie atexit
, die es erlaubt Parameter zu senden? oder wahrscheinlicher gibt es einen anderen Weg, den ich vermisse?
Sie benötigen nur eine Variable, die auf Ihren Speicherpool zeigt. Das scheint akzeptabel. – this
Wenn Sie mit einem modernen Betriebssystem arbeiten, werden beim Beenden alle Ressourcen freigegeben. Das bedeutet, dass der gesamte zugewiesene Speicher freigegeben wird, alle geöffneten Dateien geschlossen werden usw. –
Wenn Sie z. Dateien, die während der gesamten Prozesslaufzeit geöffnet sein müssen, dann greifen Sie wahrscheinlich auch an mehreren Stellen darauf zu, und das bedeutet, dass es bereits eine globale Variable oder zumindest global in einer Übersetzungseinheit ist und Sie dann eine Funktion zum Schließen haben können Diese Datei wird von einer globalen 'clean_all'-Funktion aufgerufen. Das Gleiche gilt für den Speicher, den Sie zuweisen. –