![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 28.03.2012
Сообщений: 4
|
![]()
Здравствуйте, столкнулся с проблемой при работе с двоичным файлом. В файле блоки данных разного размера, поэтому приходится использовать динамический массив. У каждого блока есть заголовок 27 байт, в котором зашита длина всего блока. В зависимости от данных блоки записываются в разные файлы.
При использовании динамического массива "PDP: Array of Char", программа зависает на второй итерации. При копировании части строки PZPBIN в Lpak. Lpak - строка с длинной блока данных. Туплю второй день, не могу догнать в чём проблема. Кто может подскажите, заранее спасибо. Код:
|
![]() |
![]() |
![]() |
#2 |
Негодник
Форумчанин
Регистрация: 10.11.2009
Сообщений: 880
|
![]()
Было бы неплохо поСЧупать ваш ЕНтот файл TM. Если он не велик, то залейте во вложения. Иначе трассируйте и просматривайте состояния переменных. Возможно вы пытаетесь считать огромный блок данных, возможен выход за пределы файла при считывании, или ещё что-нибудь.
Если помог, проси поставить минус. Будь оригинален!
Последний раз редактировалось Rin; 03.04.2012 в 18:32. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 28.03.2012
Сообщений: 4
|
![]()
Файл великоват, а при трассировке переменная Lp =10, первые несколько блоков по 37 байт, 27 заголовок и 10 данные. Проблема в том, что я как то неправильно работаю с массивом(, или в передаче данных. Со статичным массивом на 10 элементов (например), из файла в файл перегоняется на раз, но данные не все по 10 байт, а с динамическим беда.
|
![]() |
![]() |
![]() |
#4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
Есть ли гарантии, что длина PZPBIN всегда 216 символов?
Вставьте showmessage с длиной перед копированием. И вообще, зачем его "вытаскивать" из строки? Это значение хранится в n[26] (имхо). Я вообще не понял, зачем создавать столько промежуточных строк, чьи значения больше никак не используются, но вам, конечно, виднее, какая информация должна быть обработана.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 03.04.2012 в 19:33. |
![]() |
![]() |
![]() |
#5 |
Негодник
Форумчанин
Регистрация: 10.11.2009
Сообщений: 880
|
![]()
Сделайте проверку что ли
Код:
Если помог, проси поставить минус. Будь оригинален!
Последний раз редактировалось Rin; 03.04.2012 в 19:47. |
![]() |
![]() |
![]() |
#6 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
Rin, длина PZPBIN меньше или равна 216
![]() И вот если меньше, то лучше так не копировать) Тогда уж Lpak:=Copy(PZPBIN,length(PZPBIN)-15,16);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#7 |
Негодник
Форумчанин
Регистрация: 10.11.2009
Сообщений: 880
|
![]()
BDA, условие я предлагаю, чтобы при трассировке можно было посмотреть, длина массива >= 216, или все таки нет.
Если помог, проси поставить минус. Будь оригинален!
|
![]() |
![]() |
![]() |
#8 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,429
|
![]()
Тогда исправьте в своем сообщении знак ">" на ">=", а то ввели меня в заблуждение
![]()
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#9 |
Регистрация: 28.03.2012
Сообщений: 4
|
![]()
Длина PZPBIN всегда равна 216, последние 2 байта = длина инф. части. Да и с пеобразованиями проблем при трассировке нет. Проблема, на мой взгляд, с дин. массивом и передачей значений в связке этих операторов.
Код:
Команды, типа: SetLength(PDP, 0); Finalize(PDP); PDP:=nil; Lpak:=''; в концовке цикла сразу приводят к зависанию и выдают ошибку доступа к каким-то адресам памяти. Последний раз редактировалось Arrow_S; 03.04.2012 в 20:18. |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]() Код:
но модет быть надо так @PDP[0]
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 03.04.2012 в 21:17. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема при работе с файлами | stck | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 21.12.2011 11:28 |
Работа с нетипизированными файлами | JustKurt | Общие вопросы Delphi | 4 | 18.07.2009 10:46 |
проблема при работе с несколькими исходными файлами | Grind | Помощь студентам | 2 | 19.02.2008 19:37 |
ошибка 105 (при работе с типизированными файлами) | sdp | Общие вопросы Delphi | 8 | 11.07.2007 11:12 |