Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

Крыша едет с динмаическими массивами...   Найти похожие ветки 

 
Asteroid ©   (2005-08-02 01:12) [0]

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

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 - нет. Памяти выше крыши, все выделяется...
У меня уже крыша съехала...но Дельфи куда за мной пошла???


 
lookin ©   (2005-08-02 01:31) [1]

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

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;


 
Asteroid ©   (2005-08-02 01:33) [2]

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


 
lookin ©   (2005-08-02 01:35) [3]

[2] Asteroid ©   (02.08.05 01:33)

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


 
Asteroid ©   (2005-08-02 01:54) [4]

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


 
Mx ©   (2005-08-02 02:06) [5]


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

Либо юзать AllocMem


 
TUser ©   (2005-08-02 07:26) [6]

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


 
tesseract ©   (2005-08-02 11:16) [7]

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


 
Asteroid ©   (2005-08-02 12:53) [8]

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



Страницы: 1 вся ветка

Текущий архив: 2005.08.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
1-1122699792
NickMan
2005-07-30 09:03
2005.08.21
Странный глюк с видимостью переменной


14-1122376544
desam
2005-07-26 15:15
2005.08.21
WAP чат


14-1122494401
Михаил(Киров)
2005-07-28 00:00
2005.08.21
Ещё раз про трафик


1-1122965017
henston
2005-08-02 10:43
2005.08.21
создание серваса


5-1093345802
kvi
2004-08-24 15:10
2005.08.21
Как измененить цвет шрифта у кнопок?