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

Вниз

динамический массив. чудеса.. :(   Найти похожие ветки 

 
незнайка   (2003-04-04 09:05) [0]

Привет всем..

Читаю с диска " if not Windows.ReadFile( hDevice, HDDBuffer, SECTORSIZE, n, nil ) then"(диск открываю как physicaldrive) в буффер, который объявлен как "var HDDBuffer :Array of Byte;". Перед чтением с диска у меня есть строчка: "System.SetLength(HDDBuffer, SECTORSIZE-1);" Под конец процедуры у меня присутствует строчка: "HDDBuffer := nil;". Вообщем все как полагается.. Так вот.. при чтении с любого диска кроме системного все работает на ура.. как чтолько я читаю с системного диска, все проходит на ура, но на строчке "HDDBuffer := nil;" выдается ошибка: access violation at address ....

В чем проблема то?


 
MBo ©   (2003-04-04 09:07) [1]

>SetLength(HDDBuffer, SECTORSIZE-1)
Почему -1 ?


 
Skier ©   (2003-04-04 09:11) [2]

>незнайка
1) Хорошо бы увидеть текст процедуры полностью
2) А что если просто убрать HDDBuffer := nil
(память освободиться при выходе из процедуры...) Не поможет ?


 
icWasya ©   (2003-04-04 09:13) [3]


1) SetLength(HDDBuffer, SECTORSIZE)

2) Windows.ReadFile( hDevice, HDDBuffer [0], SECTORSIZE, n, nil )


 
незнайка   (2003-04-04 09:31) [4]

To: MBo
Да, тут я ошибся, когда набирал сообщение.. конечно там нет "-1" ;)

To: Skier
Если убрать строчку HDDBuffer := nil, то все работает на ура, но.. имхо это неправильно

To: icWasya
Этот вариант прошел, спасибо, но объясни почему?


 
MBo ©   (2003-04-04 09:34) [5]

>Этот вариант прошел, спасибо, но объясни почему
var-параметр компилятор понимает как адрес указанной переменной.
При использовании просто HDDBuffer - используется адрес указателя на данные массива, а не на сами данные


 
незнайка   (2003-04-04 09:36) [6]

To: MBo
Тогда почему относительно остальных дисков все работало всегда?


 
MBo ©   (2003-04-04 09:40) [7]

не должно было.
Может, у тебя был статический массив или просто ты не проверял, что читается мусор черти куда.


 
незнайка   (2003-04-04 09:42) [8]

To: MBo
В том то и дело, что проверял.. все сектора (ну скажем первые 10000) читались и записывались правильно..


 
Skier ©   (2003-04-04 09:42) [9]

>незнайка
Просто везло...


 
незнайка   (2003-04-04 09:47) [10]

To: Skier

М-да.. может быть и так.. может быть...


 
Palladin ©   (2003-04-04 10:09) [11]

Чудес не бывает.


 
Anatoly Podgoretsky ©   (2003-04-04 10:15) [12]

Бывают рубашки


 
Тимохов   (2003-04-04 12:18) [13]

Делать HDDBuffer := nil не надо. Это лишенее.
Т.к. динамические массивы так же как и строки используют подстчет ссылок. См. help.



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

Текущий архив: 2003.04.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
7-54923
Arez
2003-02-27 11:23
2003.04.17
Как записать компакт диск?


1-54590
jel
2003-04-07 10:32
2003.04.17
Ожидание завершения порожденного процесса


14-54884
MachmuD
2003-03-31 13:52
2003.04.17
Помогите с алгоритмом для построения кривых Серпинского


3-54500
malkolinge
2003-03-31 14:12
2003.04.17
Сравнение с датой на сервере


1-54730
PrettyFly
2003-04-05 14:08
2003.04.17
Internal error: URW3950