我似乎无法弄清楚为什么以下不起作用
import ctypes
from ctypes.util import find_library
libc = ctypes.CDLL(find_library('c'))
userpointer = ctypes.c_void_p
sizeimage = 320*240*2
if libc.posix_memalign(userpointer, libc.getpagesize(), sizeimage) != 0:
raise Exception('ENOMEM')
我正在尝试使用v4l2捕获。我不能分配内存。
我试过传递ctypes.addressof(userpointer)
我试图将userpointer转换为c_void_p
但仍然没有。
答案 0 :(得分:1)
你的代码中有两个问题:你使用cpopes.c_void_p 类型的而不是它的实例,并且你将用户指针的void *直接传递给posix_memalign,而不是posix_memalign要求的void **。以下将做你想要的:
import ctypes
from ctypes.util import find_library
libc = ctypes.CDLL(find_library('c'))
userpointer = ctypes.c_void_p()
sizeimage = 320*240*2
if libc.posix_memalign(ctypes.byref(userpointer), libc.getpagesize(),
sizeimage) != 0:
raise Exception('ENOMEM')