PUERTA | GATE-CS-2017 (Conjunto 1) | Pregunta 27

Considere el siguiente código C:

#include <stdio.h>

int * assignval (int *x, int val)
{
    *x = val;
    return x;
}

int main()
{
    int *x = malloc(sizeof(int));
    if (NULL == x) return;
    x = assignval(x, 0);
    if(x)
    {
        x = (int*) malloc(sizeof (int));
        if (NULL == x) return;
        x = assignval (x, 10);
    }
    printf("%d\n", *x);
    free(x);
}

El código sufre uno de los siguientes problemas:
(A) error del compilador ya que el retorno de malloc no se encasilla correctamente.
(B) error del compilador porque la comparación debe hacerse como x==NULL y no como se muestra.
(C) se compila con éxito pero la ejecución puede resultar en un puntero colgando.
(D) se compila correctamente, pero la ejecución puede provocar una pérdida de memoria.

Respuesta: (D)
Explicación: el código se ejecutará y dará una salida = 10, por lo que se descartan las opciones A y B.

 int * x= malloc (sizeof(int));

Esta declaración asigna una ubicación a x. Ahora,

(int*)malloc(sizeof(int));

nuevamente asigna una nueva ubicación a x , la ubicación de memoria anterior se pierde porque ahora no tenemos ninguna referencia a esa ubicación, lo que resulta en una pérdida de memoria.

Por lo tanto, la opción D es correcta.

La fuga de memoria ocurre cuando los programadores crean una memoria en el montón y se olvidan de eliminarla. Las fugas de memoria son problemas particularmente serios para programas como demonios y servidores que, por definición, nunca terminan.
Artículo detallado sobre Fuga de memoria

Código de ejecución de la pregunta:

#include<stdio.h>
int *assignval (int *x, int val) 
{
    *x = val;
    return x;
}
  
void main () 
{
    int *x = malloc(sizeof(int));
    if (NULL == x) return;
    x = assignval (x,0);
    if (x)
    {
        x = (int *)malloc(sizeof(int));
        if (NULL == x) return;
        x = assignval (x,10);
    }
    printf("%d\n", *x);
    free(x);
}

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 *