Форум: "Начинающим";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
ВнизПроблемма с динамическим массивом Найти похожие ветки
← →
[stalker] © (2006-06-02 02:24) [0]Проблемма началась, после того, как начал мудрить с динамическим массивом. Не знаю в чем именно проблемма, так что описать у меня наврятли получиться, лучше гляньте код))
http://webfile.ru/974037 42 кбайт
← →
XProger © (2006-06-02 04:11) [1][stalker], и не надейся
← →
Cash © (2006-06-02 07:34) [2]Ты лучше дай вырезку кода, где эта штука объявляется, иницыализируется и
используется, а еще - вычищается ли память из под нее.
← →
[stalker] © (2006-06-02 10:35) [3]
...
var
Pole: array of array of integer;
...
В OnCreate 1 формы...
MC:=10;
MR:=10;
SetLength(pole,MC) ;
for i:=0 to MR-1 do begin
SetLength(pole[i],MC);
end;
...
...
for row :=0 to MR+1 do
for col :=0 to MC+1 do
Pole[row,col] := -3;
...
В 3 форме, в buttonClick...
saper_1.MC := StrToInt(Edit1.Text);
saper_1.MR := StrToInt(Edit1.Text);
...
← →
Tsmar (2006-06-02 11:12) [4]for row :=0 to MR+1 do
for col :=0 to MC+1 do
Pole[row,col] := -3;
замени на
for row :=0 to MR-1 do
for col :=0 to MC-1 do
Pole[row,col] := -3;
← →
han_malign © (2006-06-02 12:24) [5]и вот это работает до поры до времени:
MR:=10;
SetLength(pole,MC) ;
for i:=0 to MR-1 do begin
а лучше, таки - SetLength(pole, MR, MC);
← →
Kolan © (2006-06-02 13:33) [6]
> [stalker] © (02.06.06 02:24)
Чтобы не пролететь с выходом за массив советую писать так:MR:=10;
SetLength(pole,MC) ;
for i:=Low(Pole) to High(Pole) do begin
Гарантировани всё будет впорядке...
← →
Cash © (2006-06-02 13:56) [7]
> MC:=10;
> MR:=10;
> SetLength(pole,MC) ;
> for i:=0 to MR-1 do begin
> SetLength(pole[i],MC);
> end;
Это, спрашивается, что такое??? :(
Товарищ! Вас кто этому учил? Возмите бейсбольную биту и... дальше сами
знаете. :)))
Так, делаем как я :)))begin
Type
TPVector = array of integer; // Это поможет, если будет надо взять колонку целиком.
TPMap = array of TPVector; // Так рекомендовано создавать двухмерные массивы.
var
Pole: TPMap;
MC,MR,i,j: integer;
begin
MR:=10; // Я так понял это колонки.
MC:=10; // Это идать столбцы.
SetLength(Pole,MC,MR); // Тоже рекомендовано, если массив будет как C(столбец,строка)
i:=0;
while i < Length(Pole) do begin
j:=0;
while j < Length(Pole[0]) do begin
Pole[i,j]:=random(100); // i-й столбец, j-я строка.
inc(j);
end;
inc(i);
end;
end;
Кстати насчет выравнивания кода в листингах, такой код, который видно
выше сделан с помощью спец символа - неразрывного пробела (&nbsp;),
советую, хоть и малость мутарно, но код то как смотрится! ;)
← →
Cash © (2006-06-02 14:00) [8]Да... еще забыл!
У табиж массив как глобальная пееременная, дак вот, мало ли что,
перед SetLength(...) сделай такую штуку:Finalize(Pole);
илиPole:=nil
Менеджер памяти иногда очень ругается если его часто заставлять выделять
память.
← →
DiamondShark © (2006-06-02 15:30) [9]
> Менеджер памяти иногда очень ругается если его часто заставлять
> выделять
> память.
а Finalize(Pole); или Pole:=nil заставляет МП реже выделять память?
;-)
← →
Cash © (2006-06-02 15:51) [10]Типа того. :)))
← →
[stalker] © (2006-06-02 18:53) [11]Всем СЭНКС, в будущем учту)) Обошелся без динамического массива))
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c