pregunta muy sencilla, me hizo el siguiente programa:cero tamaño malloc
#include <stdlib.h>
int main(int argc, char ** argv)
{
void * ptr;
ptr = malloc(0);
free(ptr);
}
Y no segfault en mi máquina. ¿Es un comportamiento portátil de stdlib malloc y gratis, o estoy buscando problemas?
Editar: Lo que parece no portátil es el valor devuelto por malloc. La pregunta es sobre la combinación malloc (0) + libre, no el valor de ptr.
tener en cuenta que, si esto no funciona, no tendría que haber un montón de especial de los casos código. Las personas malloc una cantidad de bytes en función de una variable o expresión todo el tiempo, y sería incómodo tener que comprobar cero cada vez. –
relacionado: http://stackoverflow.com/questions/2022335/whats-the-point-in-malloc0 – jldupont
Lo sé: super último comentario en esta pregunta cerrada. Pero a veces hay un uso para 'malloc (0)' que no se menciona. En aquellas implementaciones en las que devuelve un valor no NULL, especialmente en una compilación DEBUG, es probable que asigne MÁS de lo que pidió y le da el puntero justo después de su encabezado interno. Esto le permite obtener un _feel_ de uso de memoria real si lo obtiene antes y después de una serie de asignaciones. –