Der POSIX-Systemaufruf putenv
gibt an, dass die zugewiesene Speicherzeichenfolge vom Aufrufer nach dem Aufruf von putenv
nicht freigegeben werden kann. Daher können Sie putenv
nicht mit einer automatischen Variable aufrufen.
Beispiel:
%Vor% Meine Frage an dieser Stelle ist ... wie ist der Umgebungsvariablenspeicher free
'd? Muß man sie getrennt aufbewahren und Dinge ständig aus der Umwelt entfernen? Ie.
EDIT: Es sieht so aus, als müsste ich das selbst verfolgen, zumindest nach Valgrind:
%Vor% Verwenden Sie nicht putenv()
, wenn Sie sich Sorgen um den Speicherverlust machen.
Deshalb bietet POSIX setenv()
und unsetenv()
- diese übernehmen die Kontrolle über das Gedächtnis und verwalten es.
Zitieren der manuellen Seite putenv()
(URL oben):
Die Funktion
putenv()
soll das Argument string verwenden, um Umgebungsvariablenwerte festzulegen. Das Argument string sollte auf eine Zeichenfolge der Form "name= value
" verweisen. Die Funktionputenv()
soll den Wert der Umgebungsvariablen name gleich dem Wert value machen, indem eine vorhandene Variable geändert oder eine neue Variable erstellt wird. In jedem Fall wird die Zeichenfolge, auf die string zeigt, Teil der Umgebung, sodass die Änderung der Zeichenfolge die Umgebung ändern muss. Der von string verwendete Platz wird nicht mehr verwendet, wenn eine neue Zeichenfolge, die name definiert, anputenv()
übergeben wird.
Nein, Sie müssen das nicht manuell tun. Speicher für Ihre Umgebung wird vom Betriebssystem freigegeben (als Teil Ihres Prozessspeichers), wenn Ihr Prozess beendet wird.
Tags und Links c++ system-calls unix