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

Considere las siguientes tres funciones de C:

[PI] int * g (void) 
{ 
  int x= 10; 
  return (&x); 
}  
    
[P2] int * g (void) 
{ 
  int * px; 
  *px= 10; 
  return px; 
} 
    
[P3] int *g (void) 
{ 
  int *px; 
  px = (int *) malloc (sizeof(int)); 
  *px= 10; 
  return px; 
}

¿Cuál de las tres funciones anteriores es probable que cause problemas con los punteros? (GATE 2001)
(A) Solo P3
(B) Solo P1 y P3
(C) Solo P1 y P2

(D) P1, P2 y P3

Respuesta: (C)
Explicación: En P1, la variable puntero x es una variable local para g(), y g() devuelve el puntero a esta variable. x puede desaparecer después de que g() haya regresado ya que x existe en la pila. Por lo tanto, &x puede volverse inválido.
En P2, a la variable de puntero px se le asigna un valor sin asignarle memoria.
P3 funciona perfectamente bien. La memoria se asigna a la variable de puntero px mediante malloc(). Entonces, px existe en el montón, su existencia permanecerá en la memoria incluso después del retorno de g() como está en el montón.

Cuestionario de esta pregunta

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 *