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

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

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

> Такой вопрос. Впервый раз добавление записи в список проходит нормально, а когда начинаешь добавлять запись в список 2 раз, то список портиться.
сообщение
Сообщение #1


Новичок
*

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

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


Такой вопрос. Впервый раз добавление записи в список проходит нормально, а когда начинаешь добавлять запись в список 2 раз, то список портиться. Помогите плиз.
 
program ttts;
uses crt;
Type Symbol = record
Surname: String;
Name: String;
{ Fullname: String;
Bhirtday: String;
Pol: String;
Identity: String;
DateCreate: String;
DateEnd: String;
Adres: String;}
end;
type Item = ^Pointer;
Pointer = record
key: integer;
str: Symbol;
Next: Item;
end;
var f: file of Symbol;
s: Symbol;
t,tmp,list:Item;
i:integer;
Key:char;

procedure AddRecord;
var tmp: Item;
begin
ClrScr;
writeln(i);
writeln('Vvedite name');
Readln(s.Name);
writeln('vvedite fam');
Readln(s.Surname);
if (list = nil) then
begin
GetMem(List, sizeof(Item));
tmp:= List;
end
else
begin
tmp:=List;
while (tmp^.next <> nil) do tmp:=tmp^.next;
GetMem(tmp^.Next, sizeof(Item));
tmp:=tmp^.next;
end;
tmp^.next:= Nil;
inc(i);
tmp^.key:=i;
tmp^.str := s;
writeln('OK');
end;

procedure ViewRecords ;
begin
ClrScr;
writeln('SPISOK');
t:=List;
while(t <> nil) do
begin
writeln(t^.key, ' ',t^.str.Name,' ',t^.str.Surname);
t:=t^.next;
end;
end;
procedure home;
begin
ClrScr;
writeln('F1 - „®Ў*ў«Ґ*ЁҐ §*ЇЁбЁ');
writeln('VNIZ - ‚лў®¤ §*ЇЁбҐ©');
writeln('VVERx - „®¬*и*пп бва**Ёж*');
end;
begin
i:=0;
ClrScr;
home;
List:=nil;
repeat
Key:=Readkey;
case Key of
#59: AddRecord;
#72: ViewRecords;
#80: home;
end;
until Key = #79;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
сообщение
Сообщение #2


Гость






Обрати внимание, что Item - это указатель, а не запись (record). Особенно внимательно в строках с выделением памяти для следующего элемента списка GetMem.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Цитата(-Федосеев Павел- @ 21.04.2012 20:51) *

Обрати внимание, что Item - это указатель, а не запись (record). Особенно внимательно в строках с выделением памяти для следующего элемента списка GetMem.


Отлично, спасибо большое за подсказку. Все дело было c выделением памяти. Помогла замена getMem на new
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


alex457, что тут такого продвинутого в твоем программировании? То, что ты не можешь список нормально организовать?? В следующий раз, пожалуйста, создавай тему в Задачах.

Тема переносится..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 18.05.2024 22:56
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name