¿Cuál es el resultado del siguiente fragmento de código y por qué? char * ptr; if ((ptr = (char *) malloc (0)) == NULL) put ("Gota puntero nulo");

¿Cuál es el resultado del siguiente fragmento de código y por qué?
char * ptr;
if ((ptr = (char *) malloc (0)) == NULL)
put ("Gota puntero nulo");
else
put ("Gota puntero válido");
Puede hacer una suposición en negrita primero, y luego su
compilador para intentar compilar el siguiente ~ ~

El procedimiento es el siguiente

#include <stdio.h>
#include <malloc.h>
int main()
{
    
    
        char *ptr;
        if((ptr = (char *)malloc(0)) == NULL)
                puts("got a null pointer\n");
        else
                puts("got a valid pointer\n");

        int a =  malloc_usable_size(ptr);
        printf("size = %d\n", a);
        return 0;
}

Malloc solicita un espacio con una longitud de 0, malloc todavía devolverá una dirección y todavía hay un espacio de direcciones, por lo que ptr no es igual a NULL.
La función malloc tendrá un umbral. Si solicita un espacio menor que este umbral, devolverá un espacio de este tamaño de umbral.
Si el umbral es 24, si solicita un valor inferior a 24, se devolverá 24. El
resultado se muestra en
Inserte la descripción de la imagen aquí
la figura siguiente. Este umbral variará con los diferentes compiladores. Por
ejemplo, después de Ingenic mips-linux-gnu- gcc está compilado, el resultado de ejecución es el siguiente
Inserte la descripción de la imagen aquí

Si solicita un número negativo, el valor devuelto es 0, como se muestra en la figura siguiente,
Inserte la descripción de la imagen aquí
debido a que malloc estipula que no puede solicitar un número negativo.
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_28258885/article/details/114173947
Recomendado
Clasificación