Il codice sottostante restituisce un indirizzo quando viene eseguito in Windows, anche se mi aspettavo che restituisse NULL.Perché malloc (0) restituisce un indirizzo non nullo in Windows?
int main()
{
char *ptr = NULL;
ptr = malloc(0);
printf("malloc returned = %u\n", ptr);
}
Cosa potrebbe aver richiesto un'implementazione di malloc? C'è qualche motivo dietro di esso?
Poiché, questa è una memoria da 0 byte, non ho sperimentato la scrittura di alcun dato. Ma questa memoria può essere usata per qualcosa?
+1 come ho visto in realtà 1 persona che usa questo per il suo "vantaggio" quando non desiderava nulla di speciale in un ciclo che potesse far crescere la memoria di malloc'd/realloc'd molto grande. – JimR
Tuttavia, è possibile passare un puntatore nullo in 'realloc', quindi questo trucco non è in alcun modo essenziale. Potresti anche "annullare * p = 0;". –
@Steve Non è davvero un trucco. È un artefatto di programmazione e specifiche di piattaforma allentate. Senza test, non è chiaro come si comporterebbe HeapRealloc (heap, HEAP_REALLOC_IN_PLACE_ONLY, 0, 4), ad esempio. – ActiveTrayPrntrTagDataStrDrvr