Pregunta 2.b - Punteros y gestión de memoria diná… · Prácticas de programación UOC 2023

Tema: Comprensión y traza de algoritmos recursivos · Del examen Examen Prueba de síntesis enero 2023 (2023)

Enunciado

A partir del siguiente algoritmo codificado en C:

#define MAX 128

int mystery(int v[MAX], int x)

{

int res;

assert(x >= 0 && x < MAX);

if (x == 0) {

if ((v[0] % 2) != 0)

res = v[0];

else

res = 0;

} else {

if ((v[x] % 2) != 0)

res = v[x] + mystery(v, x - 1);

else

res = mystery(v, x - 1);

}

return res;

}

b)

[5%] Determina el problema que ocurriría si se sustituyera en la aserción x < MAX por x <= MAX.

Enunciado: Pregunta 2.b - Punteros y gestión de memoria diná… · Prácticas de programación UOC 2023

Solución

Según los criterios oficiales de corrección

b. [5%] Determina el problema que ocurriría si se sustituyera en la aserción x < MAX por x <= MAX.

Solución: Si se admitiese x <= MAX, al invocar la función con x = MAX, la línea donde se comprueba v[x] % 2 intentaría acceder a la posición v[MAX], la cual excede los límites declarados del array (de 0 a MAX - 1), provocando un desbordamiento de búfer o acceso fuera de rango (comportamiento indefinido).

La explicación paso a paso, hecha con IA, es Premium. Premium

Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.

‹ Pregunta 2.a - Comprensión y traza de algoritmos… · 2023 · Pregunta 2 - Apartados a y b · 2023 ›

Más ejercicios de Comprensión y traza de algoritmos recursivos