Si scusa non infinito,ma decisamente enorme,naturalmente in base ai bit del microprocessore e altri piccoli dettagli.
Ma questo vale per quasi tutte le macchine,in altre magari si usa solo la memoria fisica e non quella virtuale,in questi casi ricevere un NULL è assai probabile.
è anche difficile stabilire se avremo abbastanza memoria per l'applicazione o dopo quanto tempo tornerà disponibile.
Pertanto in via puramente teorica potremmo scrivere:
char* mem = NULL;
while ( !(mem = malloc(1000000000)) ) Sleep(1000);
Ovvio che se è la nostra applicazione a "succhiare" tutta la memoria la riga di codice appena scritta finirà per innescare un loop infinito.
Quindi ci sono molte variabili in gioco,ma secondo me la prima cosa da imparare è che ad ogni malloc deve corrispondere una free.Sempre e comunque.
Usare anche un briciolo di programmazione difensiva quale può essere il controllo del NULL allora sicuramente non guasta.Anche perchè non mi sembra di star parlando di applicazioni critiche o quant'altro.
Siamo molto ai livelli di base e quindi va seguita la strada piu classica e corretta.
Io ne ho in mente almenu una, ovvia. Ed almeno un'altra, molto meno ovvia...
Ovvero?