![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Я объявил в модуле тип: type dArrRe = array of real;
В процедуре я использую переменную этого типа, и когда я хочу узнать размер массива: i:= High(Arr) или i:= Length(Arr) - 1 , у меня происходит ошибка: Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 004A2F44 in module 'Project1.exe'. Read of address 00C98854'. Process stopped. Use Step or Run to continue. Почему? Может я чтото не тк делаю? |
|
#2
|
|||
|
|||
|
Ты объявил динамический массив! Но длину его не задал. Юзай функцию
Код:
SetLingth(Arr, длина) |
|
#3
|
|||
|
|||
|
Дело в том что эту переменную я передал процедуре в качестве параметра, а длина массива у меня была определена до вызова процедуры
|
|
#4
|
|||
|
|||
|
Вот такая конструкция работает превосходно
Код:
type
dArrRe = Array of Real;
procedure Proc(Arr: dArrRe);
var
i: Integer;
S: String;
begin
S := '';
for i := 0 to Length(Arr)-1 do
S := S + FloatToStr(Arr[i]);
Form1.Edit1.Text := S
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Arr: dArrRe;
I: Integer;
begin
SetLength(Arr, 5);
for i := 0 to 4 do
Arr[i] := i+1;
Proc(Arr);
end; |