Ada_Ru форум

Обсуждение языка Ада

Непонятная проблема с атрибутом 'Read

Оставить новое сообщение

Сообщения

KsiCom
Непонятная проблема с атрибутом 'Read
2008-06-26 20:17:29

Столкнулся с проблемой, которую никак не удаётся решить самостоятельно. Пишу программу, которая работает с гетерогенным потоком данных. Использую атрибуты '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.

 

К программе приложен бинарный файл, который читает программа (чтобы не тащить код, необходимый для записи).

 

Объясните пожалуйста, где я возможно не прав?

Причём если ошибка в логике программы, почему она проявляется таким странным образом?

Спасибо

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти