在Python中使用posix_memalign
我搞不清楚为什么下面的代码不管用
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,
但是还是没有效果。
1 个回答
1
你的代码有两个问题:你把userpointer设置成了ctypes.c_void_p的类型,而不是它的一个实例;另外,你直接把userpointer这个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')