Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
ВнизRuntime Eror :( Найти похожие ветки
← →
PiratA © (2004-03-05 17:26) [0]По ходу написаня программы возникла проблемма:
Есть функция Open которая считывает данные из нетипизированного файла в динамический массив. Если в ходе выполнения программы она была вызвана, то при завершении программы появляется сообщение EAccessViolation...
Подскажите в чем может быть проблема.
Спасибо
← →
Юрий Зотов © (2004-03-05 17:29) [1]В коде.
Еще бы видеть...
← →
Fay © (2004-03-05 17:30) [2]в 17-й строке
← →
PiratA © (2004-03-05 17:36) [3]Fay © (05.03.04 17:30) [2]
в 17-й строке
ВАХ КАКОЙ МИ ОСТРИЙ ДА?
Вот собсно код...
if Opendialog1.Execute then begin
AssignFile(f,Opendialog1.FileName);
FileMode:=fmOpenRead;
Reset(F,1);
{---HEADER---}
BlockRead(f,b,1);
BlockRead(f,s,b);
BlockRead(f,acount,4);
Setlength(A,acount+1);
{---BASE ITSELF---}
for i:= 0 to acount-1 do begin
BlockRead(f,b,1);
BlockRead(f,A[i].Alias,b);
BlockRead(f,b,1);
BlockRead(f,A[i].Name,b);
BlockRead(f,A[i].Price,8);
end;
CloseFile(f);
end;
← →
Fay © (2004-03-05 17:42) [4]Я правильно понимаю, что А - это array[10..199] of TSearchRecord?
Давай ВСЮ процедуру.
← →
PiratA © (2004-03-05 17:56) [5]Это вся процедура... "А" это array of TSearchRecord... динамический массив.
← →
Юрий Зотов © (2004-03-05 17:56) [6]1. Нужно объявление A.
2. Вот это верно?
Setlength(A, acount+1);
for i:= 0 to acount-1 do begin
Здесь ведь последний элемент не используется.
4. Ошибка возникает при закрытии программы. Отсюда вопросы:
- программа использует DLL?
- где и как очищается массив A?
← →
PiratA © (2004-03-05 18:11) [7]1. А обьявлен как глобальный массив.
2. Тут вкралась ошибка, но на результат она ИМХО не влияет.
4. Порграмма не использует ДЛЛ.
Массив А нигде и никак не очищаеется. При использовании его (дополнении\урезании) без функции ЛОАД программа ошибку не выдает.
Пробовал закоментировать цикл "for i:= 0 to acount-1 do" - ошибки нетъ.
← →
Fay © (2004-03-05 18:15) [8]Удалено модератором
← →
Anatoly Podgoretsky © (2004-03-05 19:34) [9]Удалено модератором
← →
Юрий Зотов © (2004-03-05 19:44) [10]Что такое TSearchRecord?
← →
TButton © (2004-03-05 19:49) [11]>Что такое TSearchRecord?
вы это серьезно)?
← →
Fay © (2004-03-05 19:54) [12]Удалено модератором
← →
Anatoly Podgoretsky © (2004-03-05 20:27) [13]Юрий Зотов © (05.03.04 19:44) [10]
Ну надо же нам какое то описание массива, чем этот тип плох?
← →
olookin © (2004-03-05 20:33) [14]Это реально вообще?
BlockRead(f,b,1);
BlockRead(f,s,b);
Может надо так?
BlockRead(f,b,1);
BlockRead(f,s,SizeOf(b));
← →
Alexander666 © (2004-03-06 05:32) [15]Да что гадать, нужен весь код, вместе с переменными и структурой TSearchRecord, ИМХО.
← →
Verg © (2004-03-06 07:25) [16]Как говорится, у меня ошибка в программе
a:=b;
Не подскажите в чем проблема?
← →
Юрий Зотов © (2004-03-06 08:48) [17]Народ, я вполне серьезно - что такое TSearchRecord?
Я такого типа никогда не встречал (а если и встречал, то уже об этом забыл). Во всех доступных мне хелпах и исходниках такого типа тоже нет.
А ведь если там имеются какие-то динамические поля, то это как раз и может указать на причину ошибки. Она же не зря проявляется при финализации - явно идет какое-то обращение к уже освобожденной памяти. Скорее всего, происходит попытка автоматического освобождения памяти, которая уже была освобождена ручками. И эта память как-то связана с массивом.
← →
Rouse_ © (2004-03-06 09:58) [18]> [3] PiratA © (05.03.04 17:36)
Предупреждение - в следующий раз ветки с подобными высказываниями будут удалены.
← →
Ihor Osov'yak © (2004-03-06 10:59) [19]ладно, одна из версий...
BlockRead(f,b,1);
здесь в b что-то прочитали
BlockRead(f,s,b);
здесь в s читаем количество блоков (в нашем случае - байт, см. функцию открытия файла), которое равно значению в b. Где есть гарантия, что общий размер этих блоков, не превышает размера памяти, отведенной под переменную s? (подсказка - в случае превышения произойдет затирание значений в соседних переменных, стеке, коде, етс.. - соотв. непредсказуемыми последствиями)... Еще. Из кода, не видно, что такое s. А вдруг это указатель? И тд. и тп. Одним словом - [1]. Подсказка - [3] - не ответ, так как там приведен только фрагмент, которого недостаточно для проведения анализа..
Еще. PiratA, у вас очень плохой стиль написания кода. Потенциально опасный. Посмотрите, как пишут нормальные люди. Хотя бы тот же Борланд.
Архангельского, если читаете, выбросте в печку и не берите больше в руки.
← →
Fay © (2004-03-06 18:20) [20]2Ihor Osov"yak © (06.03.04 10:59) [19]
Присоединяюсь. У меня самого уже терпения не хватает, чтобы так ответить.
← →
TButton © (2004-03-06 18:24) [21]>Народ, я вполне серьезно - что такое TSearchRecord?
>
>Я такого типа никогда не встречал (а если и встречал, то уже
>об этом забыл). Во всех доступных мне хелпах и исходниках
>такого типа тоже нет.
наверное имелся ввиду тип TSearchRec...
← →
Юрий Зотов © (2004-03-10 12:31) [22]> TButton © (06.03.04 18:24) [21]
> наверное имелся ввиду тип TSearchRec...
Разве в TSearchRec есть поля Alias и Price?
Потому-то и непонятно, что это за тип такой.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.033 c