¿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