Tengo una estructura en la cual tengo:
- Una variable int que carga el legajo de un alumno (un numero cualquiera)
- Un puntero char, en donde se va a guardar el nombre del alumno (Ejemplo Juan)
- Un unsigned char en donde se guarda el codigo de una materia. (Ejemplo CATEGORIA B).
En el main lo que hago es cargar un arreglo estatico de esta estructura.
Lo que tengo que hacer con la funcion filtrar es crear un arreglo dinamico que cree e incluya los valores del arreglo estatico que tengan la categoria B.
No se cual es el error, pensaba que era algo de memoria dinamica que estaba fallando, pero puse una memoria grande e igualmente el programa falla.
Código
#include <stdio.h> #include <stdlib.h> #include <conio.h> #define T 3 struct s_alumno { unsigned int leg; char*nombre; unsigned char cod_car; }; typedef struct s_alumno t_alumno; t_alumno* filtrar(t_alumno arr[T],char cod_car); void IMPRIMIR(t_alumno*); int main() { t_alumno arr[T]; int i=0; char letra; t_alumno* listado=NULL; arr[0].nombre="Fabian"; arr[1].nombre="Pablo"; arr[2].nombre="Manuel"; while(i<T) { letra=getche(); arr[i].cod_car=letra; i++; } listado=filtrar(arr,'B'); IMPRIMIR(listado); return 0; } t_alumno* filtrar(t_alumno arr[T],char cod_car) { int i=0,j=0,fin=0; t_alumno*lista=NULL; while(i<T) { if((cod_car)==arr[i].cod_car) { (lista+j)->leg=arr[i].leg; (lista+j)->cod_car=arr[i].cod_car; j++; } i++; } (lista+j)->leg=0; return lista; } void IMPRIMIR(t_alumno* listado) { int i=0; while(listado[i].leg!=0) { i++; } }