Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

Диманический массив как поле класса   Найти похожие ветки 

 
ranetka   (2004-10-17 02:51) [0]

Хотелось бы использовать динамический массив как поле класса. Т.е. я не знаю заранее, сколько элементов мне понадобится занести в этот массив( что-то вроде класса-контейнера в с++ ). Вопрос - как бы это было удобнее реализовать на Object Pascal?


 
Добрый дядька   (2004-10-17 02:53) [1]

А в чем проблема?

TMyClass=class
 FArray: array of Integer;
end


 
ranetka ©   (2004-10-17 17:27) [2]

Дело в том, что когда второй раз изменяю размер этого массива с помощью SetLength(..), то появляется ошибка обращения к памяти.


 
Добрый дядька   (2004-10-17 17:28) [3]

>ranetka ©   (17.10.04 17:27) [2]
Ну что тут можно сказать. Ошибка в программе.


 
ranetka ©   (2004-10-17 17:40) [4]

>Добрый дядька   (17.10.04 17:28) [3]
Кусочек кода:
 VM = class
  private
   Variables : array of variable;// variable = record
   VarCount : integer;
  public
   function AddOperand (op:string):boolean;

 end;

function VM.AddOperand (op:string):boolean;
var tmp:array of Variable;
  i,j:integer;
begin
  if VarCount>0 then begin // изменяем размер массива не первый раз
     SetLength(tmp,VarCount);
     for i:=0 to VarCount do
        tmp[i]:=Variables[i];
     inc(VarCount);
     SetLength(Variables,VarCount);
     for i:=0 to VarCount-1 do
        Variables[i]:=tmp[i];
     Variables[i+1].name:=op;
   end
  else begin
  inc(VarCount);
  SetLength(Variables,VarCount);
  Variables[0].name:=op;
  end;

end;


 
begin...end ©   (2004-10-17 17:47) [5]


> [4] ranetka ©   (17.10.04 17:40)

Выход за границы массива... Даже не смешно...


 
ranetka ©   (2004-10-17 19:32) [6]


> begin...end ©   (17.10.04 17:47) [5]

Я, наверно, совсем глупая. Где здесь выход за границы?


 
olookin ©   (2004-10-17 19:34) [7]

[6] ranetka ©   (17.10.04 19:32)

А ведь он (begin..end) прав.  Вот тут

SetLength(tmp,VarCount);
    for i:=0 to VarCount(а надо бы VarCount-1) do
       tmp[i]:=Variables[i];


 
default ©   (2004-10-17 20:10) [8]

не
function VM.AddOperand (op:string):boolean;
var tmp:array of Variable;
 i,j:integer;
begin
 if VarCount>0 then begin // изменяем размер массива не первый раз
    SetLength(tmp,VarCount);
    for i:=0 to VarCount do
       tmp[i]:=Variables[i];
    inc(VarCount);
    SetLength(Variables,VarCount);
    for i:=0 to VarCount-1 do
       Variables[i]:=tmp[i];
    Variables[i+1].name:=op;
  end
 else begin
 inc(VarCount);
 SetLength(Variables,VarCount);
 Variables[0].name:=op;
 end;
а
function VM.AddOperand (op:string):boolean;
begin
 Inc(VarCount);
 SetLength(Variables, VarCount);
 Variables[High(Variables)].Name := op;
end;

P.S. при увеличении длины массива неопределённые значения находятся только в добавленных элементах остальные как были


 
ranetka ©   (2004-10-20 22:42) [9]

спасибо, все работает. В след раз буду внимательнее



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.037 c
3-1097189230
Black
2004-10-08 02:47
2004.11.07
Как добавлять новые столбцы в таблицу ADO?


1-1098727888
Irvin
2004-10-25 22:11
2004.11.07
Как узнать место расположения папки "Мои документы"


1-1098700844
cvg
2004-10-25 14:40
2004.11.07
Окно программы поверх всех окон -- как?


4-1096612217
Rem
2004-10-01 10:30
2004.11.07
Координаты эдита


1-1098788125
Alexious
2004-10-26 14:55
2004.11.07
Массивы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский