Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.037 c
3-1097480718
Воробьев_Иван
2004-10-11 11:45
2004.11.07
Все программы созданные мной на Delhi7 отказались работать


4-1096456968
Сергей Ю.
2004-09-29 15:22
2004.11.07
Работа со сканером штрих-кодов


14-1098294434
Vasya.ru
2004-10-20 21:47
2004.11.07
Программа поиска мата в 3 хода (шахматы)


1-1098355337
Temporary
2004-10-21 14:42
2004.11.07
Class. Вопросы.


1-1098377903
Kolan
2004-10-21 20:58
2004.11.07
ComboBox - Ctl3D





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский