IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Вылетает из компилятора с ошибкой 216
East_2864
сообщение 28.11.2014 18:18
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


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);

Что делать?


Прикрепленные файлы
Прикрепленный файл  T_DM.PAS ( 2.52 килобайт ) Кол-во скачиваний: 173
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 30.11.2014 22:03
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Смею предположить, что у тебя 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) можно почитать здесь.

Но что-то мне подсказывает, что ты некорректно пытаешься работать с файлами и динамическими списками.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
alex 10
сообщение 30.12.2014 10:40
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


запустил в pascal ABC. сам паскаль ошибок не нашёл,но программа не работает.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 30.12.2014 21:23
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Всё правильно - синтаксических ошибок нет. Но где же ошибка? Попробуй отладить.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 27.04.2024 18:18
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"