La memoria per le variabili di ambiente iniziali può essere sopra lo stack, ma questo non significa necessariamente che anche i nuovi debbano essere allocati lì.
Come allocare le stringhe utilizzate per impostare le variabili di ambiente dipende da quale funzione si usa per impostarlo:
-
putenv () non copia la stringa ("nome = valore") passata ad essa, quindi ha bisogno di essere in un posto che non viene deallocato. Ad esempio, un malloc () che non viene liberato è buono, ma funzionano anche stringhe letterali (se sai quale nome + valore vuoi impostare in fase di compilazione).
-
setenv () copia le stringhe ("nome", "valore") è passato, quindi possono essere ovunque tu piace. Possono essere letterali, allocati con malloc (), alloca (), il nuovo char di C ++ [], oppure possono essere solo un array globale o stack-allocato. E quando setenv () ritorna puoi smaltire o riutilizzare quella memoria come preferisci. (Nota il terzo parametro (sovrascrittura int) se decidi di usarlo)
Posso suggerire di leggere su quelle funzioni?