Python & CTypes Null Pointer Error
Python & CTypes Null Pointer Error
我正在访问Python的C 共享库。C 共享库管理信号分析器,并在没有源的情况下分发。
其中一个功能要求将结构传递到函数调用中,我不确定我是否会使用CTYPE正确地进行操作。
标题文件中结构的定义是:
typedef struct saIQPacket {
float *iqData;
int iqCount;
int purge;
int dataRemaining;
int sampleLoss;
int sec;
int milli;
} saIQPacket;
和我最终打电话的功能:
SA_API saStatus saGetIQData(int device, saIQPacket *pkt);
在Python中,我创建了一个类,如下所示:
class IQPacketData (ct.Structure):
_fields_ = [('iqData',ct.c_float*48611),
('iqCount',ct.c_int),
('purge', ct.c_int),
('dataRemaining', ct.c_int),
('sampleLoss', ct.c_int),
('sec', ct.c_int),
('milli', ct.c_int)]
i然后使用以下内容:
self.iqPurge = ct.c_int(0)
self.iqDataRemaining = ct.c_int(0)
self.iqSampleLoss = ct.c_int(0)
self.secondsRemaining = ct.c_int(0)
self.millisecondsRemaining = ct.c_int(0)
self.iqarraySize = ct.c_int(24305)
self.iqArr = (ct.c_float*48611)()
self.saIQPacketData = IQPacketData(self.iqArr,
self.iqarraySize,
self.iqPurge,
self.iqDataRemaining,
self.iqSampleLoss,
self.secondsRemaining,
self.millisecondsRemaining)
初始化设备后,我称之为以下功能:
err = self.dll.saGetIQData(self.deviceHandle,ct.pointer(self.saIQPacketData))
函数运行时,它将返回-1的值,该值将转换为空指针错误。我构造结构并将其传递给函数调用的方式是否有问题?
@ereryksun在评论中建议的,问题是类型。下面的工作代码以供将来参考:
结构应为:
import ctypes as ct
class IQPacketData (ct.Structure):
_fields_ = [('iqData',ct.POINTER(ct.c_float)),
('iqCount',ct.c_int),
('purge', ct.c_int),
('dataRemaining', ct.c_int),
('sampleLoss', ct.c_int),
('sec', ct.c_int),
('milli', ct.c_int)]
创建实例:
self.iqPurge = ct.c_int(0)
self.iqDataRemaining = ct.c_int(0)
self.iqSampleLoss = ct.c_int(0)
self.secondsRemaining = ct.c_int(0)
self.millisecondsRemaining = ct.c_int(0)
self.iqarraySize = ct.c_int(24305)
self.iqArr = (ct.c_float*48611)()
self.saIQPacketData = IQPacketData(self.iqArr,
self.iqarraySize,
self.iqPurge,
self.iqDataRemaining,
self.iqSampleLoss,
self.secondsRemaining,
self.millisecondsRemaining)
最后调用该函数:
err = self.dll.saGetIQData(self.deviceHandle,ct.pointer(self.saIQPacketData))
一些注释:数组大小参数是实际数组大小的一半。该功能将2个交织的浮子置于每个样品的阵列中(复杂的智商数据(。
将数组指针转换回python数组是使用numpy完成的:
np.fromiter(self.iqArr,dtype=np.float,count=48611)
相关文章:
- "error: no matching function for call to"构造函数错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- C++ - "!pointer"和"pointer == nullptr"的区别?
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- C++错误:"error: int aaa::bbb is protected within this context"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- "error: subscripted value is not an array, pointer, or vector",我正在使用字符串
- C++编译错误,"malloc: *** error for object: pointer being freed was not allocated"
- Python & CTypes Null Pointer Error
- 编译 C++ 代码时"Error: comparison between pointer and integer"
- 解析 csv 文件,"malloc: *** error for object 0x7ffeeb4f4b80: pointer being freed was not allocated"出现此错误
- "[Error] pointer value used where a floating point value was expected" 如何解决此错误?
- 使用 "this" 关键字时的"Error: expression must have a pointer type"
- 在C++,我收到一条消息"error: 'void*' is not a pointer-to-object type"
- 调试"malloc error: pointer being freed was not allocated" ,使用 gdb
- "error: request for member ‘size’ in ‘a’, which is of pointer type"但我不认为这是一个指针
- 仅在模拟器中" malloc error pointer being freed was not allocated "错误:
- Pointer-to-member-function error