Главная страница
    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.041 c
3-1097328611
HotIce
2004-10-09 17:30
2004.11.07
База Данных Access: ADO или BDE?


4-1096455272
Koala
2004-09-29 14:54
2004.11.07
Серийный № HDD


14-1098272595
Vol
2004-10-20 15:43
2004.11.07
Вернуть к жизни винчестер и информацию на нем


1-1098457860
MRAk
2004-10-22 19:11
2004.11.07
Как Добавить картинку в Drawgride в опр ячейку


3-1097072048
Akoli
2004-10-06 18:14
2004.11.07
Создаю DBF как задать размер поля Integer?





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