相关疑难解决方法(0)

python ctypes结构数组

我有以后的代码,它最终导致分段错误.

import ctypes
from random import randint

class STRUCT_2(ctypes.Structure):
    #_pack_=2
    _fields_ = [('field_1', ctypes.c_short),
                ('field_2', ctypes.c_short),
                ('field_3', ctypes.c_short)]

class STRUCT_1(ctypes.Structure):
    #_pack_=2
    _fields_ = [('elements', ctypes.c_short),
                ('STRUCT_ARRAY', ctypes.POINTER(STRUCT_2))]

    def __init__(self,num_of_structs):
        elems = (ctypes.POINTER(STRUCT_2) * num_of_structs)()
        self.STRUCT_ARRAY = ctypes.cast(elems,ctypes.POINTER(STRUCT_2))
        self.elements = num_of_structs

        for num in range(0,num_of_structs):
            self.STRUCT_ARRAY[num].field_1 = 1
            self.STRUCT_ARRAY[num].field_2 = 2
            self.STRUCT_ARRAY[num].field_3 = 3

for num in range(0,100):
    test = STRUCT_1(num)
    print "%i done" % num
Run Code Online (Sandbox Code Playgroud)

输出:5完成分段故障

但是如果struct_2中没有field_3那么它似乎正常工作.如果我添加一个短字段(field_4),它会结束分段错误...

那么我做错了什么或我错过了什么?

还有其他方法来定义数组大小吗?

python arrays ctypes

9
推荐指数
1
解决办法
9113
查看次数

标签 统计

arrays ×1

ctypes ×1

python ×1