次のコードがあり、最終的にセグメンテーション違反になります。
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
出力: 5 完了 セグメンテーション違反
しかし、field_3 が struct_2 に存在しない場合、正しく動作しているように見えます。短いフィールド (field_4) を 1 つ追加すると、セグメンテーション違反が発生します...
それで、私が間違ってやっていること、またはここで見逃したことは??
配列サイズを定義する別の方法はありますか?