Título: Ayuda, violación de segmento Publicado por: antolinalvaro en 2 Diciembre 2018, 11:46 am Buenos días.
¿Alguien sabe por que me da violacion de segmento (core generado) este código? Incluyo tambien el fichero por si puede ayudar. Código
Título: Re: Ayuda, violación de segmento Publicado por: K-YreX en 2 Diciembre 2018, 11:53 am La función <pedirNombre()> dices que tiene argumentos de entrada pero en la implementación de la función no los tiene...
Título: Re: Ayuda, violación de segmento Publicado por: antolinalvaro en 2 Diciembre 2018, 11:57 am ¿Quieres decir que he de declarar las variables entre los parentesis?
Título: Re: Ayuda, violación de segmento Publicado por: K-YreX en 2 Diciembre 2018, 12:01 pm Tienes que poner los parámetros que le pasas a la función, claro.
Título: Re: Ayuda, violación de segmento Publicado por: antolinalvaro en 2 Diciembre 2018, 12:09 pm Me sigue dando violacion de segmento
Título: Re: Ayuda, violación de segmento Publicado por: K-YreX en 2 Diciembre 2018, 12:35 pm Envía el código de tu programa a ver cómo has hecho los cambios.
Edit: Te escribo aquí un par de cosas más para agilizar esto. Hay dos formas de hacer lo que quieres hacer (bueno igual hay más pero te voy a comentar dos): - Forma 1: Pasar el puntero a <FILE> como parámetro y que el fichero se abra en la función. Para ello hay que pasar el puntero por referencia y en C todo el paso de parámetros se hace por valor. Entonces no tienes que pasar un <FILE*>, sino un <FILE**>. Código
- Forma 2: Pasar como parámetro la cadena donde vas a guardar el nombre y hacer que la función devuelva <FILE*>. En ese caso tendrías que asignar el retorno de la función a una variable de tipo <FILE*>. Código
Ahora recomendaciones aparte: - Usas una variable de tipo <float><cantidadNumeros> que siempre va a ser un entero ya que sumas de uno en uno y luego usas una variable tipo <int><i> que hace exactamente lo mismo que <cantidadNumeros>. Una de las dos sobra. Pensarás que para que en <media> se guarde un <float> ambos operandos deben ser <float> pero con que lo sea uno es suficiente, entonces con que <suma> sea de tipo <float>, la media también lo va a ser. - Al finalizar el programa haces <%.0f> para mostrar la cantidad de números sin decimales. Usa <%d> que sirve para representar enteros y deja el <%.2f> por ejemplo para la media (o con los decimales que quieras). - Para inicializar los contadores y sumas a 0 lo puedes hacer a la vez que los declaras y así lo haces de una vez. Porque si lo haces por separado puedes usar el valor de una variable antes de inicializarla por lo que tendría basura en ese momento. - Tu programa también funciona si como has hecho tú abres el fichero en la función <pedirNombre()> y como no lo has pasado por referencia lo vuelves a abrir en el <main> pero es una solución un poco absurda tener que abrirlo en los dos sitios. Corrige los fallos que tienes y fíjate en cómo están implementadas las dos formas de hacer la función que te he puesto arriba ya que tienen algunas sutiles diferencias por si hay algo que no entiendas. Suerte. Título: Re: Ayuda, violación de segmento Publicado por: CalgaryCorpus en 2 Diciembre 2018, 15:41 pm El nombre del archivo solo se usa para abrir este, no tiene otra utilidad, de modo que la funcion que lo abre podria llamarse, por ejemplo, abrirArchivo, no pasar ningun parametro y retornar el FILE*. Internamente puede definir la variable que guarda el nombre, no es necesario definirla en el main, pasarsela a la funcion y modificarla. Una excepcion seria que que despues el main la use para algo, pero no es el caso aqui.
Código
|