Render.ru

Структуры

Epsilon

Пользователь сайта
Рейтинг
4
#1
Друзья, столкнулся со следующей проблемой. У меня есть две структуры S1 и S2. В структуре S1 есть массив, который должен содержать массив из структур S2. Структура S2 в свою очередь тоже содержит массив. Проблема в том, что создавая массив из структур S1, которые в свою очередь содержат структуры S2 при изменении значений в любой структуре S2 соответствующие значения меняются и в остальных структурах S2. Выходит так, что меняя элементы и их количество в массиве в структуре S2 я одинаково меняю их во всех структурах S2. Способ с Copy работает тоже как-то странно. В общем негодую. Кусок кода выкладываю ниже. Может кто подскажет в чем проблема?

struct s1
(
a = "Name1",
b = #()
)

-------------------------------------------------------------------------------------

struct s2
(
c = "Name2",
d = #(1, 2, 3, 4)
)

-------------------------------------------------------------------------------------

st2 = s2 "Name s2" d: #(1, 2, 3)
st1 = s1 a: "Name s1" b: #((copy st2), (copy st2), (copy st2))

st3 = #()

for i = 1 to 10 do
(

append st3 (copy st1)

)

Самое интересное, что член "a" структуры S1 можно индивидуально менять в массиве ST3 и каждый элемент этого массива будет иметь индивидуальный экземпляр этой переменной. То есть если я после выполнения вышеперечисленного алгоритма сделаю следующее:
st3[1].a = "111"
st3[2].a = "222"
то всё будет корректно и st3[3].a уже будет иметь значение "Name1", которое было заданно по умолчанию, а не "111" или "222". Но вот если мы сделаем следующее:
st3[1].b[1].d = #(5, 6, 7, 8)
то и в st3[2].b[1].d примет то же значение, и в st[5].b[1].d и т.д. А вот st3[2].b[2].d не изменится. Но если изменить st3[2].b[2].d, то изменятся соответственно и st3[7].b[2].d, и st3[4].b[2].d и т.д. Вот такие вот зависимости странные. Почему же так происходит и как это исправить?
 
Сверху