imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 11.07.2006, 16:47     # 1
karah
Newbie
 
Регистрация: 30.10.2002
Сообщения: 34

karah Путь к славе только начался
список файлов в директории

есть такой кусок программы на с++, который вроде как должен возвращать список файлов в директории(их имена). Но почему то на 78 файле выкидывает ошибку First-chance exception at 0x00329833 in file_rd.exe: 0xC0000005: Access violation writing location 0x00000000.

typedef struct
{
char fname[MAX_PATH];
}FLIST;

int get_list_of_files(char* dir,FLIST** fl)
{
long id;
struct _finddata_t file_info;
int i = 0;

id = _findfirst(dir,&file_info);
fl[i] = (FLIST*)malloc(sizeof(FLIST));
memset(fl[i]->fname, 0,sizeof(FLIST));
strcpy(fl[i]->fname, file_info.name);

if(-1 == id)
{
return -1;
}
else
{
while(_findnext(id,&file_info) == 0)
{
i++;
fl[i] = (FLIST*)malloc(sizeof(FLIST));
memset(fl[i]->fname, 0, sizeof(FLIST));
strcpy(fl[i]->fname, file_info.name);
}

_findclose(id);
}

return 0;
} // get_list_of_files()


int main(int argc, char** argv)
{
FLIST* flist;

get_list_of_files("C:\\files\\*.bmp", &flist);


return 0;
} // main()

Может кто нибудь подсказать в чем тут дело?!!
karah вне форума  
Старый 11.07.2006, 16:55     # 2
Drakosha
Full Member
 
Аватар для Drakosha
 
Регистрация: 16.10.2002
Адрес: ArchLinux, Internet
Сообщения: 557

Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)
ты не выделяеш память (malloc) для самого flist.
Drakosha вне форума  
Старый 11.07.2006, 17:01     # 3
karah
Newbie
 
Регистрация: 30.10.2002
Сообщения: 34

karah Путь к славе только начался
понятно. Тогда такой вопрос - а как мне её выделить если я не знаю заранее сколько файлов в директории?
karah вне форума  
Старый 11.07.2006, 17:09     # 4
Drakosha
Full Member
 
Аватар для Drakosha
 
Регистрация: 16.10.2002
Адрес: ArchLinux, Internet
Сообщения: 557

Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)
есть 2 варианта:
1. выделить Х элементов, и если этого не хватает, выделить Х*2 и переписать первые Х (и т.д.)
2. использовать vector<FLIST*> - он делает (1) но сам . <- реккомендую
Drakosha вне форума  
Старый 11.07.2006, 17:12     # 5
karah
Newbie
 
Регистрация: 30.10.2002
Сообщения: 34

karah Путь к славе только начался
Цитата:
Сообщение от Drakosha
есть 2 варианта:
1. выделить Х элементов, и если этого не хватает, выделить Х*2 и переписать первые Х (и т.д.)
2. использовать vector<FLIST*> - он делает (1) но сам . <- реккомендую
буду пробывать. Спасибо
karah вне форума  
Старый 11.07.2006, 17:15     # 6
Drakosha
Full Member
 
Аватар для Drakosha
 
Регистрация: 16.10.2002
Адрес: ArchLinux, Internet
Сообщения: 557

Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)
есть даже более простой вариант - исползуй vector<FLIST> и не морочся с malloc/free (или new/delete)

П.С. а спасибы - в карму
Drakosha вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 23:32.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.