Помощь - Поиск - Пользователи - Календарь
Полная версия: Вылетает из компилятора с ошибкой 216
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
East_2864
uses crt;
type
breed=(dog,pudel,bolonka,kolli,rotv);
gender=(f,m);
obj=record
p1:byte;
p2:breed;
p3:string[10];
p4:byte;
p5:gender;
p6:string[10];
end;
ff=file of obj;
mas=array[1..100] of ^obj;
var
f1:ff;
i,j,n,nh,nc:byte;
a,ah,am:mas;
dub:obj;
fl:boolean;
procedure input(var fx:ff; n:byte);
var
i,j:byte;
x:obj;
begin
reset(fx);
for j:=1 to n do
begin
with x do
begin
writeln('Type for ',j,' dog');
writeln('Type Club Number');
readln(p1);
writeln('Type breed: 0-Dog, 1-Pudel, 2-Bolonka, 3-Kolli, 4-Rotveiller');
readln(i);
p2:=breed(i);
writeln('Type Name');
readln(p3);
writeln('Type age');
readln(p4);
writeln('Type gender 0-f,1-m');
readln(i);
p5:=gender(i);
writeln('Type owner"s Surname');
readln(p6);
end;
write(fx,x);
end;
end;
procedure output(var x:mas;n:byte);
var i:byte;
begin
for i:=1 to n do
with x[i]^ do
begin
writeln;
writeln('DATA for ',i,' dog');
write('Club Number: ');
write(p1,'; ');
write('Breed: ');
case p2 of
dog:write('Dog');
pudel:write('Pudel');
bolonka:write('Bolonka');
kolli:write('Kolli');
rotv:write('Rotveiller');
end;
write('; ');
write('Name: ');
write(p3,'; ');
write('Age: ');
write(p4,'; ');
write('Gender: ');
case p5 of
m:write('male; ');
f:write('female; ');
end;
write('Owner"s Surname: ');
write(p6);
end;
end;






begin
{$R-}
assign(f1, 'D:\11-2\dogs.pas');
rewrite(f1);
writeln('Type Number of Dogs');
readln(n);
input(f1,n);
reset(f1);
for i:=1 to n do
begin
new (a[i]);
read(f1,dub);
a[i]^:=dub;
end;
nh:=round(n/2);
for i:=1 to nh do
ah[i]:=a[i];
writeln(nh);
writeln('Type new elements count');
readln(nc);
writeln(nc);
for i:=(1) to (nc) do
begin
with ah[nh+i]^ do
begin
writeln('Type for new ',(i),' dog');
writeln('Type Club Number');
readln(p1);

writeln('Type breed: 0-Dog, 1-Pudel, 2-Bolonka, 3-Kolli, 4-Rotveiller');
readln(j);
p2:=breed(j);
writeln('Type Name');
readln(p3);
writeln('Type age');
readln(p4);
writeln('Type gender 0-f,1-m');
readln(j);
p5:=gender(j);
writeln('Type owner"s Surname');
readln(p6);
end;
end;

{1_s}
fl:=true;
while fl=true do
begin
fl:=false;
for i:=1 to n do
if (a[i]^.p4)>(a[i+1]^.p4) then
begin
dub:=a[i]^;
a[i]^:=a[i+1]^;
a[i+1]^:=dub;
fl:=true;
end;
end;
{2_s}
fl:=true;
while fl=true do
begin
fl:=false;
for i:=1 to (nh+nc) do
if (ah[i]^.p1)<(ah[i+1]^.p1) then
begin
dub:=ah[i]^;
ah[i]^:=ah[i+1]^;
ah[i+1]^:=dub;
fl:=true;
end;
end;

clrscr;
output(a,n);
writeln;
output(ah,(nc+nh));
writeln;



{$R+}
end.



вылетает с ошибкой 216 после 108 строчки
Код
writeln(nc);

Что делать?
Федосеев Павел
Смею предположить, что у тебя FPC.
Открываешь в папке doc файл user.pdf и ищешь в нём описание ошибки 216:
Цитата
216 General Protection fault The application tried to access invalid memory space. This can be caused by several problems:
1. Dereferencing a nil pointer.
2. Trying to access memory which is out of bounds (for example, calling move with an invalid length).

Скорее всего, что ты имеешь дело попыткой доступа к несуществующему элементу массива.
В начале программы поставь директиву компилятора {$R+}, и тогда при отладке в IDE будет видна строка с ошибкой.
Запусти в отладочном режиме, пройдись по шагам и понаблюдай индексы.
Об отладке в IDE TurboPascal (похожей на IDE FPC) можно почитать здесь.

Но что-то мне подсказывает, что ты некорректно пытаешься работать с файлами и динамическими списками.
alex 10
запустил в pascal ABC. сам паскаль ошибок не нашёл,но программа не работает.
Федосеев Павел
Всё правильно - синтаксических ошибок нет. Но где же ошибка? Попробуй отладить.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.