El siguiente código devuelve una dirección cuando se ejecuta en Windows, aunque esperaba que devolviera NULL.¿Por qué malloc (0) devuelve una dirección no nula en Windows?
int main()
{
char *ptr = NULL;
ptr = malloc(0);
printf("malloc returned = %u\n", ptr);
}
¿Qué podría haber dado lugar a una implementación de malloc? ¿Hay alguna razón detrás de esto?
Dado que esta es una memoria de 0 bytes, no experimenté ningún dato. Pero, ¿se puede usar este recuerdo para cualquier cosa?
+1, ya que he visto a 1 persona usar esto para su "ventaja" cuando no quería un caso especial en un bucle que pudiera hacer crecer la memoria malloc/real. – JimR
Puede pasar un puntero nulo en 'realloc', sin embargo, este truco no es esencial. Podrías decir 'void * p = 0;'. –
@Steve No es realmente un truco. Es un artefacto de programación y especificaciones de plataformas sueltas. Sin pruebas, no está claro cómo se comportaría HeapRealloc (montón, HEAP_REALLOC_IN_PLACE_ONLY, 0, 4), por ejemplo. – ActiveTrayPrntrTagDataStrDrvr