КС
Катя Соловова

Паскаль. Что делать? Ошибка - Попытка разыменовать нулевой указатель.

Необходимо создать динамический масив с записями, и этим записям присвоить рандомное значение.

type zap=record

one:word;

two:word;

end;

a=array[1..6] of zap;

b=array[1..6] of word;

var

i:integer;

max,min,maxi,mini:word;

pta:^a;

ptb:^b;

begin

writeln (' one two');

for i:=1 to 6 do

begin

pta^[i].one:=random(20);

write('№,i,' ',pta^[i].one);

pta^[i].two:=random(20);

writeln(' ',pta^[i].two);

end;

writeln();

writeln('Сума полей в каждой записи');

for i:=1 to 6 do

begin

ptb^[i]:=pta^[i].one+pta^[i].two;

write(ptb^[i],' ');

end;

max:=ptb^[1];

max:=1;

for i:=1 to 6 do

if(max
begin

max:=ptb^[i];

maxi:=i;

end;

writeln();

writeln('Запись №',maxi,' имеет наибольшее количество элементов: ',max);

min:=ptb^[1];

mini:=1;

for i:=1 to 6 do

if(min>ptb^[i]) then

begin

min:=ptb^[i];

mini:=i;

end;

writeln('Запис №',mini,' имеет наименьшое количество элементов: ',min);

end.

Проблему решил) Забыл инициализировать

ПК
Павел Казанков

Эх, если это динамический массив, то я даже не знаю кто…
Это статический массив, отводимый в куче.

Динамический массив обладает двумя характерными чертами:
1. Не имеет фиксированного размера
2. И, как следствие, хранит свой размер в себе

Выглядит это примерно так:
type
Rec = record … end;

DynArr = record
__Size: Integer;
__Item: array [0..0] of Rec;
end;
PDynArr = ^DynArr;

var
__Pt:PDynArr

При выделении памяти для N элементов размер определяется как
SizeOf(DynArray)+(N-1)*SizeOf(Rec).
Первое, что делается, присваивается Pt^.Size:=N, а потом используется Pt^.Item[0]…Pt^.Item[Pt^.Size-1].

Динамичность тут в том, что мы можем изменить размер массива в ходе работы программы, отведя новую память и скопировав данные на новое место.

ЗЫ
К сожалению забыл, позволяет ли чистый паскаль обращаться за границу массива напрямую, или нужно декларировать специальный тип array [0..MaxInt] of Rec, чтобы к нему приводить Item для обращения к отведённой памяти.

МИ
Мария Ионова

Проблему ты не решил. Как было верно подмечено выше, массив у тебя ни разу не динамический. Так что решай дальше.

Похожие вопросы
Паскаль пишет ошибку
Ошибка в коде на Паскале.
Ошибка в коде.. . Паскаль
Паскаль, что за ошибка?
ошибка в турбо паскале
Где ошибка в паскаль
Помогите найти ошибку. Паскаль. Ошибка в ситаксисе
Найдите ошибку на Паскале!
Ошибка паскаль
Указатель на паскале