Ich habe den folgenden Code und es endet bis Segmentierung Fehler.python ctypes Array von Strukturen
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
Ausgang: 5 getan Segmentation fault
Aber wenn field_3 nicht in struct_2 ist dann scheint es richtig zu arbeiten. Wenn ich ein kurzes Feld (Feld_4) mehr hinzufüge, endet es mit Segmentierungsfehler ...
Also was mache ich falsch oder was habe ich hier verpasst ??
Gibt es eine andere Möglichkeit, die Array-Größe zu definieren?
Warum nicht einfach 'self.STRUCT_ARRAY.append ({" field_1 ": 1," field_2 ": 2," field_3 ": 3})'? – mishik