Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
ВнизКрыша едет с динмаическими массивами... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c