Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.5 MB
Время: 0.033 c
1-1078588961
jjoiner
2004-03-06 19:02
2004.03.28
Как часть одного массива скопировать в другой массив?


4-1074063655
comwad
2004-01-14 10:00
2004.03.28
Как нажать кнопку в другой программе (ЧУЖОЙ ПРОЦЕСС не мой)?


3-1074854595
Asdor
2004-01-23 13:43
2004.03.28
dbExpress и MSSQL


3-1078157676
Subdigger
2004-03-01 19:14
2004.03.28
inplaceeditor


7-1073742243
Phantomaz
2004-01-10 16:44
2004.03.28
Как получить ID-шники нитей (Threads) процесса ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский