我正在写一个应该找到文件的函数。
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/