Главная страница
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.015 c
3-54491
Андрей Королёв
2003-03-30 16:34
2003.04.17
Не получается выполнить обработку Исключительной ситуации


1-54562
Вадим
2003-04-06 13:01
2003.04.17
dll и VCL


14-54836
Rol
2003-04-01 09:44
2003.04.17
С Днём Математика!


6-54779
Ruf
2003-02-25 15:42
2003.04.17
шлюз


14-54841
Cherepovets
2003-04-01 14:14
2003.04.17
Как открыть папку