tengo una estructura malloc() 'd, y después de usarlos, quiero liberar(), pero mi programa se bloquea aquí. ¿Alguien puede decirme qué estoy haciendo mal?Cómo liberar() un malloc() 'd estructurado correctamente?
Aquí está mi código:
struct data
{
char *filename;
char *size;
};
//primarypcs is a long type variable
struct data *primary = (struct data *)malloc(primarypcs * sizeof(struct data));
memset(primary, 0, sizeof(struct data *) * primarypcs);
...
...
...
for (i = 0; i < primarypcs; i++)
{
free(primary[i].filename); //<----my program freezes here
free(primary[i].size); //<----or here
}
free(primary);
Gracias de antemano!
Kampi
EDIT:
¿Cómo puedo memoria correctamente malloc para el nombre de archivo y el tamaño?
Edit2:
Lo siento, pero yo estaba en un apuro, y que no te lo dije toda la información que necesita. Déjame hacerlo ahora :) Básicamente, quiero crear una aplicación, que obtiene la lista de archivos de dos unidades/carpetas determinadas y luego las compara. Pensé (y todavía lo hago), que la forma más fácil es almacenar los nombres de los archivos y su tamaño en una estructura como la mencionada anteriormente. Así que tengo que asignar memoria dinámicamente (creo que esto es lo que ellos llaman) para nombre de archivo y tamaño y de corse para la estructura también.
No veo que asigne memoria para 'filename' y' size'. –
Sí, hay un error en tu código: en el malloc usas sizeof (struct data) que parece correcto, pero en memset usas sizeof (struct data *) que es la mitad del tamaño. Esto significa que tiene solo la mitad de la memoria y la última mitad de la memoria se eliminará cuando intente liberarla. La respuesta debe ser gratuita (primaria); y nada más – cmroanirgo
Si esto es C++, debería usar new y delete. – Xorlev