Título: Problema con realloc en un bucle Publicado por: SheKeL_C$ en 18 Marzo 2016, 14:11 pm Estoy aprendiendo c y me encuentro con algo que no se como resolver..
Usando olly encuentro que el problema de este codigo me lo da con el 'realloc', en la primera vuelta del bucle funciona bien, pero en la segunda se va todo al garete Estoy usando bien el realloc?? Código: struct st_files { char filename[80]; // se supone que el nombre de un archivo no superan los 80 caracteres... es un test unsigned long filesize; }; int getFilesDirectoryTest(st_files **files, const char *path) { WIN32_FIND_DATA FindFileData; HANDLE hFind = INVALID_HANDLE_VALUE; hFind = FindFirstFile(LPCSTR(path), &FindFileData); if (hFind == INVALID_HANDLE_VALUE) { // Error... return -1; } else { int aux = 0; // Numero de archivos en el directorio *files = (st_files*) calloc(1,sizeof(st_files)); do { if (strcmp(FindFileData.cFileName, ".") != 0 && strcmp(FindFileData.cFileName, "..") != 0 ){ st_files *sTemp = (st_files*) realloc( * files, (aux+1) * sizeof( struct st_files)); if (sTemp == NULL) return -1; *files = sTemp; strcpy(files[aux]->filename, FindFileData.cFileName); files[aux]->filesize = 2; // por poner un ejemplo.... aux++; } } while(FindNextFile(hFind, &FindFileData) != 0); FindClose(hFind); return aux; } } int main() { const char *path = "C:\\test\\*"; st_files *files1; int total = getFilesDirectoryTest(&files1, path); for (int i = 0; i<total; i++) { debug_(files1[i].filesize); debug_(files1[i].filename); } } Título: Re: Problema con realloc en un bucle Publicado por: MAFUS en 18 Marzo 2016, 14:21 pm ¿Qué error te dice el compilador que hay?
Por cierto, tienes pérdida de memoria en la linea Código *files apunta a una zona a la que has adquirido memoria con calloc pero no la liberas antes de la nueva asignación. Para solucionar eso, y saltarte un paso en ello, haz realloc sobre *files mismo; realloc se encargará de liberar la memoria y ocupar otra para *files, que para eso es su trabajo. Título: Re: Problema con realloc en un bucle Publicado por: SheKeL_C$ en 18 Marzo 2016, 16:49 pm Es que el error que me da es en tiempo de ejecucion.
Si solo lista un archivo lo hace correctamente, en cuanto son dos o mas es donde me da el error. Haciendo debug con el olly veo que cuando llega al relloc en la segunda iteraccion el EAX me devuelve un valor que no apunta a un espacio existente Título: Re: Problema con realloc en un bucle Publicado por: Arkangel_0x7C5 en 18 Marzo 2016, 17:48 pm esto esta mal
Código deberia ser asi Código
Estabas produciendo un desbordamiento de la pila Saludos ark Título: Re: Problema con realloc en un bucle Publicado por: SheKeL_C$ en 18 Marzo 2016, 18:04 pm esto esta mal Código deberia ser asi Código
Estabas produciendo un desbordamiento de la pila Saludos ark :D :D :D Gracias.. ese era el problema |