Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемма с динамическим массивом [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], и не надейся


Наверх

Титульная страница Поиск, карта сайта Написать письмо