模块'ntdll.dll'中地址*的访问冲突。写地址*

时间:2012-01-20 09:13:05

标签: c++ windows c++builder

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

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 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

  

我做错了什么?

Yes.

WIN32_FIND_DATA data;

HANDLE handle = FindFirstFile(name, &data);