![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
распределение памяти в динмаическом массиве записей
Nil © (2007-12-06 14:47:00)С виду тревиальная задача: нужен динамический массив элементами которго являются записи. Вот что я налабал:
const
MAXDRVCOUNT=1000;
type
pDrvRec = ^TDrvRec;
TDrvRec=record
ClassName,
ClassGUID,
DevName,
HardwareID,
CompatibleIDS,
DeviceClassName,
Manufacturer,
FriendlyName,
DriverDate,
ProviderName,
DriverVersion,
DriverDesc: string[255];
ClassIm: integer;
end;
PDrvArr = ^TDrvArr;
TDrvArr = array [1..MAXDRVCOUNT] of pDrvRec;
public
{ Public declarations }
DrvList: pDrvArr;
.................
for I := 1 to 100 do
begin
ReAllocMem(MainForm.DrvList,i*sizeof(TDrvRec)+4);
MainForm.DrvList[i]^.ClassName:= 'Hello'; - вот здесь AcessViolation
end;
не понятно почему ошибка возникает на 3-м шаге цикла. подскажите пож где грабли?
заранее благодарен
Palladin (2007-12-06 15:45:00) [21]
const
MAXDRVCOUNT=1000;
type
pDrvRec = ^TDrvRec;
TDrvRec=record
ClassName,
ClassGUID,
DevName,
HardwareID,
CompatibleIDS,
DeviceClassName,
Manufacturer,
FriendlyName,
DriverDate,
ProviderName,
DriverVersion,
DriverDesc: string[255];
ClassIm: integer;
end;
PDrvArr = ^TDrvArr;
TDrvArr = array [1..MAXDRVCOUNT] of pDrvRec; // размер элемента массива = SizeOf(pDrvRec)
public
{ Public declarations }
DrvList: pDrvArr;
.................
for I := 1 to 100 do
begin
ReAllocMem(MainForm.DrvList,i*sizeof(TDrvRec)+4); // почему делаем реаллок по размеру SizeOf(TDrvRec) да еще +4
MainForm.DrvList[i]^.ClassName:= 'Hello'; - вот здесь AcessViolation // почему обращаемся к неинициализированному указателю?
end;
Nil (2007-12-06 15:43:00) [22]> Сергей М.
спасибо что заметили!!
обратите внимание на тему "нужен динамический массив" а не "есть динамический массив"
а по существу вопроса можете что нибудь предложить, кроме того что вы увидели [1..MAXDRVCOUNT]?
Германн (2007-12-06 15:41:00) [23]
> В "налабанном" динамическим массивом и не пахнет.
В "налабанном" пахнет граблями, что автор и сам признал. А не надо бездумно тащить из тырнета всё то барахло, которое там валяется с незапамятных времен.
Сергей М. (2007-12-06 15:32:00) [24]
> нужен динамический массив
> Вот что я налабал
В "налабанном" динамическим массивом и не пахнет.
Германн (2007-12-06 15:20:00) [25]Ну разве что для ТП.
Nil (2007-12-06 15:19:00) [26]> Dib@zol
увидел скелет в каком то примере ну и развил его до своей задачи
а под Finalize что подразумевается?
Юрий Зотов (2007-12-06 15:00:00) [27]> Nil (06.12.07 14:47)
Да... понакручено. Указатель на массив указателей....
Зачем усложнять жизнь самому себе? Если нужен динамический масив, так динамический массив и используйте, без всякого мудрежа.
Dib@zol (2007-12-06 14:50:00) [28]А не легше ли так:
DrvList:array of TDrvRec + SetLength + Finalize
???