Ok, cio' che volevo sapere e' se a priori ciascun processo puo' sapere quanto spazio poter allocare sull'heap ovvero e di conseguenza quanto "memory leak" si puo' in teoria permettere.

Ho notato, poi, che dopo aver fatto una free il puntatore e' ancora valido ed e' possibile riassegnare la variabile che esso punta.

Questo vale "sempre" o come mi sembra di capire dal man dipende dalla gestione della mem da parte del s.o. ?

Questo il banale codice di esempio:

codice:
#include <stdio.h>
#include <stdlib.h>

struct prova
{
int val;
struct prova *next;
};

int main()
{

/*Alloca*/
struct prova* first = malloc(sizeof(struct prova));

/*Assegna*/
first->val = 5;
first->next = NULL;

printf ("Before free: %d\n", first->val);

/*Libera*/
free(first);
printf ("After free: %d\n", first->val);

/*Riassegna*/
first->val = 10;
printf ("After an assignment post-free: %d\n", first->val);

return(0);
}
Se invece di fare la free effettuo un assegnamento del puntatore a NULL allora nell'istruzione successiva di assegnamento ottengo, "giustamente", un SIGSEGV.