Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Крыша едет с динмаическими массивами... [D7, WinXP]


Asteroid ©   (2005-08-02 01:12:00) 

Предвижу град камней в мою сторону за такой код %)

type
 TLayer = array of Word;
 TField = packed array [ 0..7, 0..7 ] of TLayer;
 TServerMap = packed array [ 0..255, 0..255 ] of TField;
 PServerMap = ^TServerMap;

var
 ServerMap, ObjectMap: PServerMap;
...
procedure MapsInit;
var i, j, k, l: Integer;
begin
 GetMem( ServerMap, sizeof( TServerMap ) );
 GetMem( ObjectMap, sizeof( TServerMap ) );
 for i := 0 to 255 do
   for j := 0 to 255 do
     for k := 0 to 7 do
       for l := 0 to 7 do
         begin
         SetLength( ServerMap^[ i, j ][ k, l ], 1 );
         SetLength( ObjectMap^[ i, j ][ k, l ], 1 ); // (*)
         end;

end;


Суть в том, что он вылетает на строчке (*). Отдельно для ServerMap работает, отдельно для ObjectMap - нет. Памяти выше крыши, все выделяется...
У меня уже крыша съехала...но Дельфи куда за мной пошла???


Asteroid   (2005-08-02 12:53:00) [1]

А вообще по ночам спать надо, тогда и ошибок таких не будет %)
Всем спасибо :)


tesseract   (2005-08-02 11:16:00) [2]

Вообще GetMem=NEW
FreeMem=Dispose
Размер выделяемой памяти игнорируется
AllocMem - тот же GetMem только область памяти забивается нулями.


TUser   (2005-08-02 07:26:00) [3]

Либо вообще - New


Mx   (2005-08-02 02:06:00) [4]


> Asteroid ©   (02.08.05 01:54) [4]
> Надо было после GetMem заполнить нулями выделенную память

Либо юзать AllocMem


Asteroid   (2005-08-02 01:54:00) [5]

Фуууухххх...разобрался!
Надо было после GetMem заполнить нулями выделенную память. А то SetLength пытается обратиться по адресу того мусора, который там был...


lookin   (2005-08-02 01:35:00) [6]

[2] Asteroid ©   (02.08.05 01:33)

Это так, и я сморозил глупости....


Asteroid   (2005-08-02 01:33:00) [7]

Они одного типа - PServerMap.


lookin   (2005-08-02 01:31:00) [8]

Я сам ничего в этом не понимаю... Но

type
TLayer = array of Word;
TField = packed array [ 0..7, 0..7 ] of TLayer;
TServerMap = packed array [ 0..255, 0..255 ] of TField;
PServerMap = ^TServerMap;

var
ServerMap, ObjectMap: PServerMap;
...
procedure MapsInit;
var i, j, k, l: Integer;
begin
GetMem( ServerMap, sizeof( TServerMap ) );
GetMem( ObjectMap, sizeof( TServerMap) ); //почему не TObjectMap?
for i := 0 to 255 do
  for j := 0 to 255 do
    for k := 0 to 7 do
      for l := 0 to 7 do
        begin
        SetLength( ServerMap^[ i, j ][ k, l ], 1 );
        SetLength( ObjectMap^[ i, j ][ k, l ], 1 ); // (*)
        end;

end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо