Нарушение прав доступа по адресу * в модуле 'ntdll.dll'.Написать адрес * - PullRequest
0 голосов
/ 20 января 2012

Я пишу функцию, которая должна найти файл.

WIN32_FIND_DATAA* data;

HANDLE handle = FindFirstFile(name,data);//Access violation at address 76FC2373 in module 'ntdll.dll'. Write of address 00000008.
while(handle!= INVALID_HANDLE_VALUE)
{
    FindNextFile(handle,data);
    result.push_back(data->cFileName);
    if(GetLastError())
        break;
}
FindClose(handle);
free(data);

Я что-то не так делаю?

Ответы [ 2 ]

1 голос
/ 20 января 2012

Функция FindFirstFile ожидает адрес структуры WIN32_FIND_DATA.Вы просто передавали значение непосвященного указателя.Должно быть:

WIN32_FIND_DATA data;
HANDLE handle = FindFirstFile(name, &data);

Обязательно удалите и строку free(data); (так как data не выделено в куче).

Кроме того, ваш токовый циклпропустит первый файл.Вы должны использовать что-то вроде:

do
{
    if (handle == INVALID_HANDLE_VALUE) break;
    result.push_back(data.cFileName);
}
while (FindNextFile(handle, &data);
0 голосов
/ 20 января 2012

Я что-то не так делаю?

Да.

WIN32_FIND_DATA data;

HANDLE handle = FindFirstFile(name, &data);
...