domanda molto semplice, ho fatto il seguente programma:a zero dimensioni malloc
#include <stdlib.h>
int main(int argc, char ** argv)
{
void * ptr;
ptr = malloc(0);
free(ptr);
}
E non segfault sulla mia macchina. È un comportamento portatile di stdlib malloc e gratuito, o sto cercando problemi?
Modifica: Ciò che sembra non portabile è il valore restituito da malloc. La domanda riguarda la combinazione malloc (0) + libera, non il valore di ptr.
Tenete a mente che, se questo non ha funzionato, non ci deve essere un sacco di special-case codice. Le persone effettueranno un malloc un numero di byte basato su una variabile o un'espressione per tutto il tempo, e sarebbe scomodo dover controllare lo zero ogni volta. –
correlati: http://stackoverflow.com/questions/2022335/whats-the-point-in-malloc0 – jldupont
Lo so: commento super tardivo su questa domanda chiusa. Ma c'è _sometimes_ un uso per 'malloc (0)' che non è menzionato. Su quelle implementazioni in cui restituisce un valore non NULL, specialmente in un build DEBUG, probabilmente alloca PIÙ di quello che hai richiesto e ti dà il puntatore appena oltre la sua intestazione interna. Ciò consente di ottenere un valore _ _ per l'effettivo utilizzo della memoria se si ottiene questo prima e dopo una serie di allocazioni. –