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

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

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

> Проблема с удалением элемента списка из памяти
сообщение
Сообщение #1





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

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


Программа, создающая список типа "стэк", создающая элементы списка равные по модулю отрицательным после них, а затем удаляющая сами отрицательные элементы. Проблема состоит в том что процедура DeleteNeg, "стопорится", если указываешь ей удалять элемент списка из памяти Dispose(Del). Если закомментарить эту строчку, то программа все выполняет без проблем, но отрицательные элементы получается удаляются только логически, а память не освобождается. как предотвратить это. А то предстоит еще делать более сложные вещи со списками=) smile.gif

P.S. думаю что тема-вопрос про такого рода задания уже была, но меня интересует именно почему удаление из памяти не делается. Буду благодарен если мне кто нибудь поможет найти причину) yes2.gif

Вот код программы
Код
program hw_1;
uses crt;
type
     PItem=^TItem;
     TItem=record
     Data:integer;
     Prev:PItem;
     end;
var
    P:PItem;
    Head:PItem;
    fl:text;

procedure CreateSame;
var Pnew:PItem;
    Curr:PItem;
begin
Curr:=Head;
while Curr<>nil do begin
if Curr^.Data<0 then begin
   new(Pnew);
   Pnew^.Prev:=Curr^.Prev;
   Pnew^.Data:=Abs(Curr^.Data);
   Curr^.Prev:=Pnew;
end;
Curr:=Curr^.Prev;
end;
end;

procedure DeleteNeg;
var
Del:PItem;
Save:PItem;
Curr:PItem;
begin
Curr:=Head;
While (Head^.Data<0) and (Head<>nil) do
begin
Curr:=Head;
Head:=Head^.Prev;
Dispose(Curr);
end;
Save:=Head;
Curr:=Head^.Prev;
while Curr<>nil do begin
if Curr^.Data>0 then
Save:=Curr
else
begin
Save^.Prev:=Curr^.Prev;
Del:=Curr;
{Dispose(Del);}
end;
Curr:=Curr^.Prev;
end;
end;

procedure ShowList;
var Curr:PItem;
begin
TextColor(15);
Curr:=Head;
while Curr<>nil do begin
write(Curr^.Data,'  ');
Curr:=Curr^.Prev;
end;
end;

procedure CheckList;
begin
       CreateSame;
       writeln;
       Textcolor(5);
       writeln('‘®§¤ ­л а ў­лҐ Ї® ¬®¤г«о ®ваЁж вҐ«м­л¬');
       ShowList;
       DeleteNeg;
end;

procedure MakeList;
  begin
    Head:=nil;
    While not (EOF(fl)) do begin
    new(P);
    readln(fl,P^.Data);
    if Head<>nil then P^.Prev:=Head
    else P^.Prev:=nil;
    Head:=P;
    end;{while}
  end;


Begin
ClrScr;
   Assign(fl,'HW_1.txt');
    {$I-}
    reset(fl);
    {$I+}
    if IOResult=0 then begin
    MakeList;
    TextColor(5);
    writeln('?б室­л© бЇЁб®Є');
    ShowList;
    CheckList;
    end
    else writeln('ЋиЁЎЄ  ®вЄалвЁп д ©« ');
writeln;
TextColor(5);
writeln('ЏаҐ®Ўа §®ў ­­л© бЇЁб®Є');
ShowList;
readln;
readln;
end.


вот еще прикрепил файл с этой программой.

Сообщение отредактировано: mr. -


Прикрепленные файлы
Прикрепленный файл  SPISOK.PAS ( 1.71 килобайт ) Кол-во скачиваний: 241
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





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