Главная страница
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.013 c
3-54409
PSA
2003-04-01 11:44
2003.04.17
Создание Базы


1-54625
АлеКо
2003-04-08 02:58
2003.04.17
Выделить подстроку.


3-54406
Apachi
2003-04-01 08:39
2003.04.17
Потоки


14-54865
Supreme 2
2003-03-30 01:32
2003.04.17
---|Ветка была без названия|---


3-54418
Mixa
2003-04-01 12:17
2003.04.17
Обновление LONG RAW