Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.037 c
1-1078325312
able
2004-03-03 17:48
2004.03.28
HTML - подсветка синтаксиса в TRichEdit, оптимизация.


1-1078400588
ChcngerMan
2004-03-04 14:43
2004.03.28
Internet+computer


1-1078848467
Leech
2004-03-09 19:07
2004.03.28
MDI. Несколько копий одной формы. Как обрабатывать события?


1-1078647630
bjohny
2004-03-07 11:20
2004.03.28
Утечка памяти


7-1071935855
саша
2003-12-20 18:57
2004.03.28
осциллограф на базе компа