C | Asignación dinámica de memoria | Pregunta 3

¿Producción?

# include<stdio.h>
# include<stdlib.h>
   
void fun(int *a)
{
    a = (int*)malloc(sizeof(int));
}
   
int main()
{
    int *p;
    fun(p);
    *p = 6;
    printf("%d\n",*p);
    return(0);
}

(A) Puede que no funcione
(B) Funciona e imprime 6

Respuesta: (A)
Explicación: El programa no es válido. Intente reemplazar “int *p;” con “int *p = NULL;” e intentará desreferenciar un puntero nulo.
Esto se debe a que fun() hace una copia del puntero, por lo que cuando se llama a malloc(), está colocando el puntero copiado en la ubicación de la memoria, no p. p apunta a la memoria aleatoria antes y después de la llamada a fun(), y cuando la desreferencia, se bloqueará.
Si desea agregar memoria a un puntero desde una función, debe pasar la dirección del puntero (es decir, doble puntero).

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *