Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Вниз

Динамические массивы, 6 версия   Найти похожие ветки 

 
RomeoGolf   (2004-03-14 19:27) [0]

Проблема в следующем: файл с неизвестной заранее длиной переписываю в динамический массив. За пределы массива не выхожу. Массив перед новой записью освобождаю. Потом с массивом надо работать, в частности, пересылать через LPT-порт в железо (это 16-разр. слова). Короче, иногда при открытии пункта меню, любого, выдается ошибка, стандартная, "... выполнила недопустимую... будет закрыта... обратитесь к разработчику", а иногда еще и "чтение по адресу FFFFFFFFF", но это реже. Отловить не могу. Но если использую массив статический максимальной длины, и ненужные элементы не использую - все работает без ошибок. Может, кто знает, в чем фишка? Буду весьма благодарен за любой совет...


 
Petr V. Abramov ©   (2004-03-14 19:42) [1]

> Может, кто знает, в чем фишка?
 Я знаю - да в чем угодно. "При открытии пункта меню" может делаться много всего нужного и ненужного. Вы найдите строку ( например, при помощи отладчика), на которой предлагают к Вам (к разработчику) обратиться  и, скорее всего, вопрос сам собой рассосется.


 
Dimaxx ©   (2004-03-14 23:37) [2]

Динамическому массиву надо сперва задать длину через SetLength, а потом грузить в него.


 
evvcom   (2004-03-15 08:21) [3]


> За пределы массива не выхожу.

А как Вы это определили?


 
Defunct ©   (2004-03-15 08:36) [4]

RomeoGolf   (14.03.04 19:27)  
Покажите как вы загружаете данные в массив.


 
Alex Konshin ©   (2004-03-15 08:45) [5]

И еще: динамический массив чего?


 
Erik ©   (2004-03-15 10:15) [6]

И неплохо бы компилировать с RangeCheck. Можно и обрабочик ошибок в программу добавить.


 
Anatoly Podgoretsky ©   (2004-03-15 10:17) [7]

Очень сомнительно, что не выходишь


 
RomeoGolf   (2004-03-15 17:16) [8]


> И еще: динамический массив чего?

Говорю же- 16-разрядные слова, то бишь, типа word.

,
> Покажите как вы загружаете данные в массив.

Исходника под рукой нет, на другой машине, но смысл такой - раз длины файла не знаю даже приблизительно, считываю слово, увеличиваю длину массива на 1 и записываю слово в конец, SetLength"ом. Опять же, когда массив выходит за границу - ошибка сразу, четкая и уловимая, а у меня плавающая, то есть, то нету.


> И неплохо бы компилировать с RangeCheck. Можно и обрабочик
> ошибок в программу добавить.

С этим делом, как и с отладчиком, у меня проблемы, не секу пока что. А за пределы точно не выхожу, проверял размер массива, размер файла и собственно данных как при трассировке, так и выдавал при прогоне в Edit.


 
Anatoly Podgoretsky ©   (2004-03-15 17:22) [9]

Это все слова, ничем не подтвержденные


 
RomeoGolf   (2004-03-15 17:33) [10]

Ладно, спасибо за участие, буду разбираться с отладчиком и RangeCheck"ом. Похоже, тему можно закрывать.


 
PVOzerski ©   (2004-03-15 17:38) [11]

Несколько наводящих вопросов (если покажутся идиотскими, прошу прощения: по не продемонстрированному коду ни о стиле, ни об уровне программиста судить нельзя). Итак:
1) учтено ли, что динамические массивы начинаются с нулевого элемента и заканчиваются элементом № длина массива минус один?
2) Учтено ли, что переменная-динамический массив - лишь указатель на начальный элемент, и ее адрес не совпадает с адресом начального элемента?


 
Defunct ©   (2004-03-15 17:41) [12]

RomeoGolf   (15.03.04 17:16) [8]

Сделайте вот что..

Type TGWordArray = Array[0.. $3FFFFFFF] of Word; // Макс 1 Gig индексации

PGW : ^TGWordArray;

..
GetMem(PGW, FileSize(F));   // Выделяете столько памяти, сколько требуется
BlockRead(F, PGW^, FileSize(F); // Загружайте весь файл сразу
..


Или еще проще через TMemoryStream или TFileStream.


 
RomeoGolf   (2004-03-15 18:09) [13]

То PVOzerski  - безусловно учтено, при нарушении этих правил ошибки, опять же, улавливаемые и не плавающие.

То Defunct  - спасибо, примерно к этому решению подходил, но надеялся обойтись средствами Дельфи для работы с массивами, без указателей напрямую.


 
Romkin ©   (2004-03-15 18:16) [14]

Кстати, а как это, размер файла не известен?!


 
RomeoGolf   (2004-03-15 18:28) [15]

А это программа, которую надо переписать во Flash, для микропроцессора, а она сейчас короткая, потом побольше станет, а тестовая - вообще во всю Flash"ку


 
PVOzerski ©   (2004-03-15 18:28) [16]

"Плавающие" ошибки при нарушении 2-го правила возникают запросто, из-за того, что при выделении блоков памяти происходит фактическое выравнивание на 4 байта. Я сам на этом нажигался :^)


 
PVOzerski ©   (2004-03-15 18:32) [17]

Не 2-го, а 1-го, прошу прощения. Дык 3 кусочка кода посмотреть можно: выделение памяти под массив, чтение из файла в массив, высвобождение памяти (если есть)?


 
RomeoGolf   (2004-03-15 18:33) [18]

То PVOzerski - большое спасибо, проверю лишний раз, может, действительно чего-то не учел и в этом все дело.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.038 c
7-1074087800
serg128
2004-01-14 16:43
2004.04.04
Как зарегистрировать Outlook Express на своей машине, чтобы.....


11-1058355768
ser_ker
2003-07-16 15:42
2004.04.04
Работа с KOlEDb


3-1078272937
Алексей
2004-03-03 03:15
2004.04.04
SQL запрос из трех баз


3-1078162957
ceval
2004-03-01 20:42
2004.04.04
как сделать чтобы из программы можно было распечатать таблицы


6-1075153241
Erazzer
2004-01-27 00:40
2004.04.04
Перехват вызова из локальной сети как в WinGate e.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский