Форум программистов, компьютерный форум, киберфорум
Наши страницы
Free Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
joint
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 8
1

Динамические структуры. Ошибка памяти

13.05.2013, 19:44. Просмотров 880. Ответов 3
Метки нет (Все метки)

Здраствуйте,
Задача:
нужно огласить тип для динамической структуры,
создать ее (2-3 звена),
добавить значения,
удалить (освободить память)

Код программы:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
program dynamic;
 
type list = ^node;
node = record
          elem: integer;
          next: list;
       end;
 
var r: list;
 
begin
   new(r);
   r^.elem:=3;
   r^.next:=r^.next^.next;
   r^.next^.elem:=4;
   r^.next^.next:=r^.next^.next^.next;
 
   write(r^.elem);
 
   readln;
end.

Получаю ошибку следующую:
Pascal
1
Exception EAccessViolation in module dynamic.exe at 00008533. Access violation at address 00408533 in module "dynamic.exe". Read of address 00000008
и окно программы сразу закрывается,
ошибку даже не успевается увидеть, это я просто заскринила удачно.

ЕСЛИ закомментировать строчки:
Pascal
1
2
3
 r^.next:=r^.next^.next;
   r^.next^.elem:=-0.3;
   r^.next^.next:=r^.next^.next^.next;
и оставить только
Pascal
1
r^.elem:=3;
То работает на УРА, в чем может быть проблема?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2013, 19:44
Ответы с готовыми решениями:

Динамические структуры. Создать в динамической памяти односвязный список типа «кольцо»
1. Создать в динамической памяти односвязный список типа «кольцо» из символьных...

Ссылки, списки, динамические структуры данных
Здравствуйте, помогите пожалуйста. Построить список символов, содержащий...

Комбинированный тип (запись). Указатели и динамические структуры данных
Помогите с задачей пожалуйста. Сведения о компьютерах содержат следующую...

Динамические структуры. Найти количество строк, содержащих данную подстроку
дана последовательность строк. найти количество строк, содержащих данную...

динамические структуры
составить программу решения уравнения ax+b=0

3
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26356 / 17683 / 7002
Регистрация: 22.10.2011
Сообщений: 31,119
Записей в блоге: 6
13.05.2013, 22:38 2
Pascal
1
2
3
   new(r);
   r^.elem:=3;
   r^.next:=r^.next^.next; // куда указывает r^.next ?
Поле next после выделения памяти под структуру не было инициализировано. Поэтому можно получить его значение (можно обратиться к r^.next), но разыменовывать его уже нельзя, потом что оно может быть nil-ом, и тогда будет разыменование нулевого указателя, может указывать туда, куда из твоей программы нет доступа, и тогда будет Segmentation Fault.
1
joint
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 8
20.05.2013, 12:25  [ТС] 3
Как решить? Делалось по примеру из книги, и по идеи должно работать
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26356 / 17683 / 7002
Регистрация: 22.10.2011
Сообщений: 31,119
Записей в блоге: 6
20.05.2013, 12:34 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Не должно. Почему - объяснено выше. Как решить - просто инициализировать переменную перед тем, как пытаться к ней обратиться.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
type list = ^node;
node = record
          elem: integer;
          next: list;
       end;
 
var r: list;
 
begin
   new(r);
   r^.elem:=3;
   new(r^.next);
   r^.next^.elem:=4;
   r^.next^.next := nil;
 
   write(r^.elem, ' ', r^.next^.elem);
 
   readln;
end.
, либо переделать в более вменяемом виде: написать процедуру, которая будет получать указатель на начало и на конец списка, и значение, и будет добавлять значение к списку. Примеры уже были, посмотри на форуме. Вот тут, например: Линейные списки: Представить каждую строку как список слов, а весь текст-как список строк
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2013, 12:34

динамические структуры
Привет! помогите написать программу, мне одну задачу осталось сдать, для...

Динамические структуры
Здравствуйте, помогите с программой (по возможности объяснить) как вывести...

динамические структуры
помогите Написать программу, в которой создаются n записей для хранения целых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru