Per il codice seguente: (1) "main" chiama una funzione "f1". (2) la funzione "f1" esegue alcuni scricchiolii numerici; crea un array di "char" con malloc e quindi restituisce il puntatore dell'array al main (senza de-allocare-freeing- l'array).La memoria allocata in una funzione rimane allocata anche dopo il ritorno della funzione?
ho 3 domande relative al caso: (1) assumo, anche se la funzione "f1" è terminato, char allocato ancora rimane assegnato finché il programma principale termina completamente. Cioè, la memoria allocata appartiene ancora al principale e nessun altro processo può accedere (intendo, interferire con) dall'esterno. Ho ragione? (2) Devo liberare l'array (assegnato in "f1") prima che il programma termini (o viene liberato non appena termina il programma principale)? (3) Se la risposta per la seconda domanda è "sì", come si libera una matrice allocata in un'altra funzione?
nota: voglio rimanere entro i limiti del puro c e non passare al C++.
char *f1 (...) {
...
...
char *fTmp = malloc (length1 * sizeof (char));
char *fData = malloc (length2 * sizeof (char));
...
...
free (fTmp);
return (fData);
}
int main() {
char *fData = f1 (...);
...
return (0);
}
Stavo facendo la stessa cosa; cioè, ho liberato la matrice in un processo che è stato creato in un altro processo ** usando il puntatore passato attraverso **. Non ero sicuro che quello che stavo facendo fosse il modo giusto. Quindi, il tuo approccio sembra la risposta più vicina: "È bello che chi assegna la memoria lo liberi anche. Se non è possibile, il chiamante diventerà responsabile di tale memoria". – ssd
@ merkez3110 ma non è possibile condividere i puntatori tra i processi (a meno che non si stia eseguendo in un ambiente senza memoria virtuale protetta). –
Perdonami per aver usato la terminologia sbagliata: "processo". Nel mio commento sopra, intendevo realmente "funzioni" diverse all'interno dello stesso programma, non processi diversi. Grazie a tutti. – ssd