Título: (Consulta) Problema con un arreglo dinamico Publicado por: palacio29 en 31 Mayo 2019, 01:04 am Tengo el siguiente ejercicio que no se que es lo que esta fallando. :huh:
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
Título: Re: (Consulta) Problema con memoria dinamica y arreglo estructuras Publicado por: K-YreX en 31 Mayo 2019, 02:20 am Varias cosas... Primero sobre los nombres. Al usar cadenas literales no estás reservando memoria en cada <struct> para guardar los nombres. Lo que estás haciendo es que los punteros del <struct> apunten a la dirección de memoria en la que se encuentran esas cadenas almacenadas desde antes de la ejecución del programa.
Entonces a la hora de crear la nueva lista con el filtro, no puedes copiar los nombres usando <strcpy()> puesto que tampoco estás reservando memoria para estos. Lo único que puedes hacer es hacer que los punteros a <char> de las nuevas <struct> apunten a las mismas cadenas literales. Ahora sobre el <realloc()>. Si no reservas memoria con <malloc()> (cosa que no deberías hacer) lo único que tienes es un puntero a <t_alumno>. Entonces para "insertar" un nuevo <t_alumno> tendrás que hacer el <realloc()> antes, no después. Para saber cuántos <t_alumno> hay en el filtro yo usaría otro parámetro por referencia para contabilizarlos y así no tener que poner el último <leg> a 0. Código
|