我正在写一个应该找到文件的函数。

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);


我做错了吗?

最佳答案

FindFirstFile function需要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);

关于c++ - 模块“ntdll.dll”中地址*的访问冲突。地址写*,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8939015/

10-11 23:14
查看更多