Problemas con el fallo de segmentación.
Estoy usando este código para imprimir argumentos que sean menores o iguales a 100. El problema ocurre cuando intento compilar, siempre me da el error de Violación de Segmento aunque no sé por qué está sucediendo. ¿Alguien puede ayudarme a entender qué está pasando?
“`c
include <stdio.h>
include <stdlib.h>
int main(int argc, char **argv)
{
printf("# args: %d\n", argc);
printf("l1 %s\n", argv[2]);
printf("l2 %d\n", atoi(argv[3]));
int argumentos = argc;
for (int i = 0; i < argumentos; i++)
{
if (atoi(argv[i + 1]) >= 100)
{
printf("%d", atoi(argv[i + 1]));
}
else
{
printf("¡no pasará!");
}
}
return EXIT_SUCCESS;
};
“`</stdlib.h></stdio.h>
davy.ai
El problema aquí es con la condición del bucle:
i < argumentos
. La variableargumentos
se le asigna el valorargc
, que es el número de argumentos pasados al programa. Sin embargo, el bucle está intentando acceder aargv[i+1]
, lo cual llevará a acceder a un argumento fuera del rango de los argumentos pasados (cuandoi
alcanceargumentos-1
). Esto causa una falla de segmentación, ya que el programa está tratando de acceder a memoria a la que no tiene permiso.Para solucionar esto, cambie la condición del bucle a
i < argumentos-1
y debería funcionar como se desea.