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.

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 ›