Форум: "Основная";
Текущий архив: 2003.03.17;
Скачать: [xml.tar.bz2];
ВнизПро дин масив ( продолжение GIL). Найти похожие ветки
← →
Демонов Е.В. (2003-03-04 09:03) [0]А вот что в голову пришло а корректно ли делать так
var a:Array of sometype;
BlockRead(f,a[0],Length(a)*SizeOf(Integer)) - где а дин масив.
т.е всегда ли @a[i]=Ptr(iNTEGER(@a[0])+i*sizeof(sometype)).
← →
Демонов Е.В. (2003-03-04 09:38) [1]>>BlockRead(f,a[0],Length(a)*SizeOf(Integer))
я имел ввиду
BlockRead(f,a[0],Length(a)*SizeOf( sometype))
← →
MBo (2003-03-04 10:02) [2]да, всегда, иначе бы и смысла никакого в этих массивах не было
← →
Paxer (2003-03-04 11:17) [3]А вот и не всегда...
Я когда-то имел большие проблемы со считыванием с файла и записью в файл из массивов подобного типа (у меня массивы записей). Условие @a[i]=Ptr(iNTEGER(@a[0])+i*sizeof(sometype)) не срабатывало, возможно от того, что я в ходе работы несколько раз менял размеры массива. Может я чего и неправильно делал, но я бы на слово не верил.
← →
REA (2003-03-04 12:43) [4]Когда меняешь размер массива, то указатели на его содержимое (@a[i]) зачастую теряются, поэтому обращаться лучше по индексам или искать указатели после изменения размера. А так вроде должно работать.
← →
MBo (2003-03-04 13:29) [5]>Paxer
У тебя была ошибка в 17 строке
← →
theodor_iv (2003-03-04 17:53) [6]Действительно, условие должно выполняться всегда (см. Delphi Language Guide / Memory Management / Dynamic array types). А вот такой BlockRead для многих типов не имеет смысла (например, для sometype = long string и т.п.)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.03.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c