![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемма с динамическим массивом [Delphi, Windows]
[stalker] © (2006-06-02 02:24:00)Проблемма началась, после того, как начал мудрить с динамическим массивом. Не знаю в чем именно проблемма, так что описать у меня наврятли получиться, лучше гляньте код))
http://webfile.ru/974037 42 кбайт
[stalker] (2006-06-02 18:53:00) [1]Всем СЭНКС, в будущем учту)) Обошелся без динамического массива))
Cash (2006-06-02 15:51:00) [2]Типа того. :)))
DiamondShark (2006-06-02 15:30:00) [3]
> Менеджер памяти иногда очень ругается если его часто заставлять
> выделять
> память.
а Finalize(Pole); или Pole:=nil заставляет МП реже выделять память?
;-)
Cash (2006-06-02 14:00:00) [4]Да... еще забыл!
У табиж массив как глобальная пееременная, дак вот, мало ли что,
перед SetLength(...) сделай такую штуку:
Finalize(Pole);илиPole:=nil
Менеджер памяти иногда очень ругается если его часто заставлять выделять
память.
Cash (2006-06-02 13:56:00) [5]
> 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;
Кстати насчет выравнивания кода в листингах, такой код, который видно
выше сделан с помощью спец символа - неразрывного пробела ( ),
советую, хоть и малость мутарно, но код то как смотрится! ;)
Kolan (2006-06-02 13:33:00) [6]
> [stalker] © (02.06.06 02:24)
Чтобы не пролететь с выходом за массив советую писать так:
MR:=10;
SetLength(pole,MC) ;
for i:= Low(Pole)to High(Pole)do begin
Гарантировани всё будет впорядке...
han_malign (2006-06-02 12:24:00) [7]и вот это работает до поры до времени:
M R:=10;
SetLength(pole,M C ) ;
for i:=0 to M R-1 do begin
а лучше, таки - SetLength(pole, MR, MC);
Tsmar (2006-06-02 11:12:00) [8]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;
[stalker] (2006-06-02 10:35:00) [9]
...
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);
...
Cash (2006-06-02 07:34:00) [10]Ты лучше дай вырезку кода, где эта штука объявляется, иницыализируется и
используется, а еще - вычищается ли память из под нее.
XProger (2006-06-02 04:11:00) [11][stalker], и не надейся