2012-01-20 436 views
0

我正在写一个函数,应该找到一个文件。模块'ntdll.dll'中地址*处的访问冲突。写地址*

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

我做错了什么?

回答

1

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

必须有一个DOT因为数据不再是指针。感谢您的回复 – Gambit

0

我做错了什么?

Yes.

WIN32_FIND_DATA data; 

HANDLE handle = FindFirstFile(name, &data); 
相关问题