2012-01-20 478 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); 
相關問題