【问题标题】:Access violation at address * in module 'ntdll.dll'. Write of address *模块“ntdll.dll”中地址 * 的访问冲突。写地址 *
【发布时间】:2012-01-20 09:13:05
【问题描述】:

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

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

我做错了什么?

【问题讨论】:

    标签: c++ windows c++builder


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

      我做错了什么?

      Yes.

      WIN32_FIND_DATA data;
      
      HANDLE handle = FindFirstFile(name, &data);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-15
        • 1970-01-01
        • 2015-07-27
        • 2014-07-19
        • 1970-01-01
        • 1970-01-01
        • 2015-12-26
        相关资源
        最近更新 更多