![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Крыша едет с динмаическими массивами... [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;