![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
динамические переменные [D5, WinXP]
Serguar © (2002-09-02 11:23:00)Привет Всем! Никак не могу разобраться почему вылетает программа на FreeMem(). У меня:
TKeyInfo = packed record
Id: Word;
NameId: String[32];
end;
PKeyInfoPack = ^TKeyInfoPack;
TKeyInfoPack = packed record
Count: Integer;
Data: array[1..MAX_ITEMS] of TKeyInfo;
end;
procedure TServer.WndProc(var AMsg: TMessage);
var
Pack: PKeyInfoPack;
begin
GetMem(Pack, KEY_PACK_SIZE);
try
Pack^.Count := Count;
for i := 0 to Pack^.Count - 1 do begin
Pack^.Data[i].Id := Gid;
Pack^.Data[i].NameId := GroupId;
end;
finally
FreeMem(Pack, KEY_PACK_SIZE);
end;
end;
После выхода из функции вылезает Access violation. Если пытаюсь что нибудь вывести перед FreeMem() - вылетает там.
Может кто посоветует что нибудь?
Заранее благодарен.
Skier (2002-09-02 11:45:00) [21]>Serguar
Аналогично McSimm © (02.09.02 11:42),тоже торможу (НЕ ПРАВИЛЬНО), но всё-таки что же в KEY_PACK_SIZE. Загадка...
Serguar (2002-09-02 11:43:00) [22]const
KEY_PACK_SIZE: Integer = SizeOf(TKeyInfoPack);
McSimm (2002-09-02 11:42:00) [23]
> Serguar © (02.09.02 11:23)
Извиняюсь протормозил. Массив статический и KEY_PACK_SIZE расчитывать не надо.
Но убедиться что значение этой константы верно - нужно.
Skier (2002-09-02 11:39:00) [24]>Serguar
Видимо нужно так :
GetMem(Pack, Count * SizeOf(TKeyInfoPack));
//бла-бла-бла-бла-бла-
FreeMem(Pack, Count * SizeOf(TKeyInfoPack));
McSimm (2002-09-02 11:28:00) [25]KEY_PACK_SIZE надо вычислять в зависимости от Count
Skier (2002-09-02 11:26:00) [26]>Serguar
А это что такой KEY_PACK_SIZE ?