Столкнулся с проблемой, которую никак не удаётся решить самостоятельно. Пишу программу, которая работает с гетерогенным потоком данных. Использую атрибуты 'Read и 'Write соответственно. С записью никаких проблем, а вот при чтении возникает ошибка:
raised CONSTRAINT_ERROR : tape.adb:35 invalid data
Соответствующая строка кода выглядит так:
Mark_Type'Read (S, T.Mark);
Если эту строку кода заменить на эквивалентный код:
Mark_Type'Read (S, m.all);
T.Mark := m.all;
или на код:
T.Mark := Mark_Type'Input (S);
то всё работает идеально и никакой ошибки не возникает (разрушения данных, прочитанных из файла тоже нет).
Программа (сокращал как мог) лежит в прикреплённом файле.
Собирал gprmake с ключами:
("-gnatW8", "-gnaty", "-gnatVa", "-gnatwa", "-gnato", "-gnatE", "-fstack-check");
Смоделировать возникновение ошибки в чистом виде не получается. Поэтому приложил вариант, на котором ошибка ещё проявляется. Программа разрабатывается на: CentOS 4.6/GNAT2008.
Более того, в несокращённом варианте программы возникновение ошибки платформозависимо (проверки проводились на всевозможных сочетаниях ОС CentOS(4.6/4.5/5.1)/Mandriva2007/Gentoo с компиляторами GNAT(2006/2007/2008) и на разном железе (только 32битном). На некоторых сочетаниях ошибка возникает, на некоторых нет. Ещё влияет набор ключей компилятора, но не самым очевидным образом.
На разных машинах и при разных модификациях кода, ошибка может "переместиться" в другое место, где используется атрибут 'Read.
К программе приложен бинарный файл, который читает программа (чтобы не тащить код, необходимый для записи).
Объясните пожалуйста, где я возможно не прав?
Причём если ошибка в логике программы, почему она проявляется таким странным образом?
Спасибо
[ Attachment content not displayed ]
[ Attachment content not displayed ]
[ Attachment content not displayed ]
[ Attachment content not displayed ]
Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти