es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema aquí es con la condición del bucle: i < argumentos. La variable argumentos se le asigna el valor argc, que es el número de argumentos pasados al programa. Sin embargo, el bucle está intentando acceder a argv[i+1], lo cual llevará a acceder a un argumento fuera del rango de los argumentos pasados (cuando i alcance argumentos-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.

Comments are closed.