Форум: "Основная";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];
Вниздинамический массив. чудеса.. :( Найти похожие ветки
← →
незнайка (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c