Autor
|
Tema: Segmentation fault (Leído 2,812 veces)
|
xJajavierx
Desconectado
Mensajes: 1
|
Hola, alguien me podría ayudar a solucionar este "problema" de segmentation fault por favor Este es el codigo: #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> typedef struct alumno { int matricula; int promedio; }T_alumno; int aleatorio20(int &cant); int promedio10(int &prom); int matricula(int &matr); void iniciar_arreglo_alumnos(T_alumno *arreglo_alumnos, int &cant); void imprime_arreglo_alumnos(T_alumno *arreglo_alumnos, int &cant, int &prom, int &matr); int main() { int cant, prom, matr; T_alumno *arreglo_alumnos; aleatorio20(cant); promedio10(prom); matricula(matr); iniciar_arreglo_alumnos(arreglo_alumnos,cant); imprime_arreglo_alumnos(arreglo_alumnos,cant,prom,matr); return 0; } int aleatorio20(int &cant) { } int promedio10(int &prom) { } int matricula(int &matr) { } void iniciar_arreglo_alumnos(T_alumno *arreglo_alumnos, int &cant) { arreglo_alumnos=new T_alumno[cant]; } void imprime_arreglo_alumnos(T_alumno *arreglo_alumnos, int &cant, int &prom, int &matr) { for(int i=0;i<cant;i++) { promedio10(prom); arreglo_alumnos[i].promedio=prom; matricula(matr); arreglo_alumnos[i].matricula=matr; } for(int i=0;i<cant;i++) { printf("Promedio %i: %d",i +1,arreglo_alumnos [i ]. promedio); printf("Matricula %i: 123%d",i +1,arreglo_alumnos [i ]. matricula); } }
|
|
« Última modificación: 3 Febrero 2020, 14:39 pm por Eternal Idol »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Primero el codigo no compila (aunque por el error que ves entiendo que el problema es de copiar y pegar) y segundo arreglo_alumnos siempre va a tener un valor indefinido. (23) : warning C4700: uninitialized local variable 'arreglo_alumnos' used iniciar_arreglo_alumnos(arreglo_alumnos,cant);Aca: void iniciar_arreglo_alumnos(T_alumno *arreglo_alumnos, int &cant) { arreglo_alumnos=new T_alumno[cant]; }
arreglo_alumnos es simplemente una variable LOCAL (al estar pasandola por valor y no por referencia) y la asignacion se pierde en cuanto salis del ambito de la funcion. O pasas doble puntero o puntero por referencia para poder efectivamente asignarle el valor a la variable declarada en main AL TENER LA DIRECCION DEL MISMO EN iniciar_arreglo_alumnos y no a donde apunta (que en tu caso es a cualquier lado al no estar inicializada la variable). T_alumno *arreglo_alumnos; printf("%p\n", arreglo_alumnos ); aleatorio20(cant); promedio10(prom); matricula(matr); iniciar_arreglo_alumnos(arreglo_alumnos,cant); printf("%p\n", arreglo_alumnos );
Asi veras con claridad como iniciar_arreglo_alumnos no hace nada util.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
CalgaryCorpus
|
El codigo parece tener varias cosas que se pueden remover.
La funcion iniciar_arreglo_alumnos ademas de no servir el proposito, no parece ser necesaria. Eliminala, reemplaza su invocacion por la peticion explicita de memoria.
Las variables prom y matr en el main no tienen sentido definirlas alli, pues cambian su valor, pero no se usan al interior de la funcion. Definelas al interior de la funcion imprimir.
Pareciera mejor tener otra funcion que asigne esos valores y que la funcion imprimir solo muestre estos valores. No se ve bien que una funcion encargada de imprimir asigne los valores tambien.
Las funciones aleatorio20, matricula y promedio10 dicen retornar int, pero no retornan nada. Podrias en vez de modificar el parametro que reciben, borrar el parametro que reciben, que no reciban nada, y hacer return del valor que calculan. Con esto incluso no vas a necesitar las variables locales prom y matr, puedes asignar lo retornado directamente a los campos (lineas 47 y siguientes).
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con segmentation fault
Programación C/C++
|
puppetz
|
7
|
3,425
|
26 Junio 2014, 23:58 pm
por Eternal Idol
|
|
|
segmentation fault en mi programa
Programación C/C++
|
:Luigi
|
3
|
4,982
|
30 Noviembre 2014, 23:37 pm
por :Luigi
|
|
|
Segmentation Fault C++
Programación C/C++
|
marlboreano
|
6
|
3,880
|
15 Enero 2015, 18:15 pm
por _Enko
|
|
|
Segmentation fault
Programación C/C++
|
albdav
|
2
|
3,054
|
11 Julio 2017, 15:23 pm
por MAFUS
|
|
|
Segmentation Fault ayuda
Programación C/C++
|
GominaTilted
|
8
|
3,699
|
23 Marzo 2020, 02:08 am
por GominaTilted
|
|