Error violacion de segmento 'core' generado

Error violacion de segmento 'core' generado

de Facundo Gil Perez -
Número de respuestas: 3

Buenas resolví el Ejercicio8 y lo compile exitosamente.

Al ejecutar el programa recibo el siguiente error:

'Violación de segmento (`core' generado)', no estoy seguro de que puedo estar haciendo mal. Según entiendo tiene que ver con la declaración de los tipos en 'printf'.

Este error ya lo tuve en otros ejercicios y en ejercicios posteriores y nunca entendí como fue que lo solucione, dejo adjunto un archivo de texto con el código para mas información.

Gracias




En respuesta a Facundo Gil Perez

Re: Error violacion de segmento 'core' generado

de Leopoldo Agorio -
Facundo! Has descubierto el verdadero helloworld de C: ese error de violación de segmento nos acompañará a lo largo y ancho del curso.

La respuesta rápida a tus problemas es un error mucho más sencillo de todas formas, pero no por ello menos usual. Tu if esta realizando una asignación, en contraposición con una comparación. argc = 4 fija el valor de argc a 4 (que es lo que hiciste pero no lo que quieres hacer). En cambio, argc == 4 compara la variable con el valor 4.

Es decir, tu if nunca estaba chequeando realmente. La siguiente pregunta, para ver la violacion de segmento es: qué pasa cuando argc no era 4 y recorres el interior del if? Cuando trates de acceder por ejemplo a argv[3], esa dirección de memoria no fue inicializada y esto causa un error. El error de violación de segmento precisamente se da cuando tratas de acceder a una dirección de memoria que el compilador tiene asignada para otro propósito.

Cualquier pregunta de continuación a las órdenes, saludo!
En respuesta a Leopoldo Agorio

Re: Error violacion de segmento 'core' generado

de Facundo Gil Perez -
Buenas leopoldo, gracias por tu respuesta. Tambien me di cuenta que aunque mi programa entrara al if habia nombrado argv[4] el cual creo que nunca aparece. Me podes confirmar si al leer los argumentos, y en arreglos en general la numeracion empieza en 0? (osea argv[0,1,2,...])

Gracias!
En respuesta a Facundo Gil Perez

Re: Error violacion de segmento 'core' generado

de Leopoldo Agorio -
Correcto, en c la numeración comienza en 0. En el caso de argv, argv[0] contiene la ruta con la que llamaste al programa (por ejemplo ./propina o ./pie2021/practico1/propina )