Python:windows错误:异常:读取0x00000000时访问冲突

2024-05-18 08:44:21 发布

您现在位置:Python中文网/ 问答频道 /正文

这个简短的函数只是获取存储设备的可用可用空间,但是我在运行代码时遇到了上述错误。

功能是:

def disk_space1(drive):
    freespace = ctypes.c_ulonglong()
    calcspace = ctypes.windll.kernel32.GetDiskFreeSpaceExA
    calcspace(drive, ctypes.byref(freespace))
    disk_size = freespace.value
    return disk_size

这个函数工作得很好,直到今天它毫无理由地停止工作,我什么也没改变。最让我困惑的是,这个函数工作正常,如果我在运行后打印出“freespace”的值,它已经找到了正确的值,但仍然会给出错误。

是什么导致了这个问题?


Tags: 函数代码功能sizedef错误空间drive
1条回答
网友
1楼 · 发布于 2024-05-18 08:44:21

您没有调用全功能签名,我认为这会导致访问冲突(由于随机内存写入)和错误。完整的函数签名是(完全文档化的here):

BOOL WINAPI GetDiskFreeSpaceEx(
  _In_opt_   LPCTSTR lpDirectoryName,
  _Out_opt_  PULARGE_INTEGER lpFreeBytesAvailable,
  _Out_opt_  PULARGE_INTEGER lpTotalNumberOfBytes,
  _Out_opt_  PULARGE_INTEGER lpTotalNumberOfFreeBytes
);

通过将函数更改为:

def disk_space(drive):
    freespace = ctypes.c_ulonglong()
    calcspace = ctypes.windll.kernel32.GetDiskFreeSpaceExA
    err = calcspace(drive,
                    ctypes.byref(freespace),
                    None,
                    None)
    assert err != 0, 'calcspace failed'
    disk_size = freespace.value
    return disk_size

我能够运行它而没有间歇性的错误。

相关问题 更多 >