Salve a tutti.
Non sono riuscito a trovare molto su internet, e la maggior parte dei documenti è in inglese, dove arranco parecchio.
Se avete qualche sito in particolare che mi può illuminare vi ringrazio.

(le domande si riferscono al c, con un compilatore gcc e sistema linux)

1-memoria dinamica: Quando creo "qualcosa" dinamicamente (array struct ecc...), questo alla terminazione del processo che lo ha creato viene liberato automaticamente dalla memoria?
E se è all'interno di una funzione, all'uscita della funzione viene mantenuto in memoria?

2-liberare memoria: Quando è necessario? (questo non l'ho ben capito, se mi fate due esempi vi rignrazio)

3-come liberare memoria:
Es:
ho un array:
int * array_di_int;

va bene se lo libero cosi?:

for(i=0;i<lunghezza_array;i++)
free(array_di_int[i]);

mentre come procedo se ho un:
int ** array_di_int;

4-proprietà processi creati con fork:
Allora, quando creo dei processi con la fork, da quel che ho capito, si viene a creare un processo padre e uno figlio.
Il figlio è la "copia" del padre, cioè ha lo stesso codice e la stessa "memoria" che ha il padre fino a quel momento. Condividono anche la tabella dei file aperti.
Quindi sono praticamente lo stesso programma che si sdoppia? (correggete pure gli eventuali errori nella definizione sopra)

5- gestione segnali.
Se devo "passare" delle variabili alla funzione (da me definita) per gestire un certo segnale, come faccio? posso unicamente con le variabili globali?

grazie a tutti.