Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Динамическая память

Привет программисты,

Пишу так:
type
PData = ^TData;
TData = record
...
Next: PData
end;
......................
var
P, M: PData;
......................
P:=M^.Next;
Dispose(M)
M:=P;
......................

Ошибка: Почему-то в М оказывается, то что должно было удалиться, где
искать ошибку???
Пробывал различные вариации, типа
P:=M;
M:=P^.Next;
Dispose(P);
и т.п. - не помогает :(

Использую Delphi 7 без SP

Афоризм напоследок: Столько дел, что и работой занятся некогда...
23 декабря 2004 г. 22:14:16

Просто студент
Eugene mailto:rav***@o*****.ru

Номер выпуска : 3900
Возраст листа : 459 (дней)
Количество подписчиков : 514
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/286169
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Thu, 23 Dec 2004 22:24:28 +0300 (#286169)

 

Ответы:

А M^.Next у тебя случайно не ссылался на M?

Если ты не забыл предварительно выделить память для M^.Next, т.е.
new(M^.Next);
P:=M^.Next;
.......................
то всё должно быть нормально. Можешь ещё попробовать после Dispose(M) заново
выделить память
new(M);
M:=P;
У меня этот вариант отлично работает.

Номер выпуска : 3901
Возраст листа : 459 (дней)
Количество подписчиков : 514
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/286360
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Денис Селезнев Fri, 24 Dec 2004 15:09:45 +0300 (#286360)

 

Тема: Динамическая память

Может я чего не понимаю..... Но зачем это в Delphi????
Там есть
aData : array of tData;
- динамические массивы!!
Или Вам видение (задание) такое было?
--
Пока, удачи. Борис Сурин surin_***@m*****.ru

Номер выпуска : 3902
Возраст листа : 459 (дней)
Количество подписчиков : 514
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/286362
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Fri, 24 Dec 2004 16:22:26 +0300 (#286362)

 

Привет Surin_bp,

Friday, December 24, 2004, 4:22:26 PM, вы писали:

Знаю, знаю...

Это лаб. работа - ни шагу в сторону! :)

Привожу текст полностью (почти):
...............
PDataUndo = ^TDataUndo;
TDataUndo = record
Data: TData;
Pos: Integer;
UType: Boolean;
(* True - Insert *)
(* False - Delete*)
Next: PDataUndo;
end;
.......................
procedure TEMailList.UAdd(D: TDataUndo);
var
P: PDataUndo;
begin
new(P);
P^:=D;
P^.Next:=UMas;
UMas:=P; <- не в этой ли строке проблема?!
//Подозрения: В UMas копируется не адрес, а содержимое переменной P
(т.е. UMas^:=P^)
//Если так, то как в UMas записать адрес P?
end;

procedure TEMailList.Undo;
begin
if UMas=Nil then
begin
E.Message:='Undo empty';
raise E;
Exit;
end;

if UMas^.UType
then Delete(UMas^.Pos) //Insert
else Insert(UMas^.Data, UMas^.Pos); //Delete
USub;
end;

procedure TEMailList.UNull;
begin
While UMas<>Nil do USub;
end;

procedure TEMailList.USub;
var
P: PDataUndo;
begin
P:=UMas;
UMas:=P^.Next;
Dispose(P);
end;
........................

Выше представлена простенькая реализация Undo на указателях для списка
адресов EMail (лабораторная работа - все типы определены преподом, за
мной реализация)

Афоризм напоследок: Принятие решения часто свидетельствует о том, что человек
устал думать.
25 декабря 2004 г. 19:33:12

Просто студент
Eugene mailto:rav***@o*****.ru

Номер выпуска : 3903
Возраст листа : 460 (дней)
Количество подписчиков : 513
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/286817
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Sat, 25 Dec 2004 19:47:40 +0300 (#286817)

 

Тема: Re[2]: Динамическая память

А это точно в Delphi? Может в BP? Или, если в Delphi, то в виде консольного?
Думаю, что смогу .... Но надо решить. В Паскале - делал, есссно
--
Пока, удачи. Борис Сурин surin_***@m*****.ru

Номер выпуска : 3909
Возраст листа : 462 (дней)
Количество подписчиков : 514
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/287698
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   "Surin B.P." Mon, 27 Dec 2004 13:00:50 +0300 (#287698)

 

Тема: Re[2]: Динамическая память

Ну ё! Опять забыл дописать: а что такое TData?
--
Пока, удачи. Борис Сурин surin_***@m*****.ru

Номер выпуска : 3910
Возраст листа : 462 (дней)
Количество подписчиков : 514
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/287699
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   "Surin B.P." Mon, 27 Dec 2004 13:23:43 +0300 (#287699)

 

Тема: Re[2]: Динамическая память

1) В Delphi реализация может быть иной, чем в Borland Pascal.
Даже лучше создать класс для работы с этим Undo и это будет лучше работать.
--
Пока, удачи. Борис Сурин surin_***@m*****.ru

Номер выпуска : 3911
Возраст листа : 462 (дней)
Количество подписчиков : 514
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/287700
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   "Surin B.P." Mon, 27 Dec 2004 13:21:08 +0300 (#287700)

 

По моему скромному мнению, связанный список и массив - не совсем одно и
тоже. Вставка в произвольное место в массиве осуществляется за линейное
время, в список - за константное. Удаление элемента - аналогично, если нужно
сохранить порядок элементов.

В массивах возникают геморрои при его расширении, нужно выделить новый блок
памяти большего размера, скопировать туда массив, освободить старый блок...
Пусть даже это делается дельфями без участия программиста. В списке проще.

Хотя массив, конечно, проще в понимании и управлении. :-)

Номер выпуска : 3904
Возраст листа : 460 (дней)
Количество подписчиков : 513
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/286895
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Sat, 25 Dec 2004 22:44:39 +0500 (#286895)

 

Здравствуйте, Юрчик.

Вы писали 25 декабря 2004 г., 23:44:39:

Это ж динамический массив! Внем вставка осушествляется именно за
константное время, это массив указатель на стректуру value/nextaddres

Ответить   Sun, 26 Dec 2004 23:21:47 +0600 (#287176)

 

Здравствуйте, Eugene.

Вы писали 24 декабря 2004 г., 1:24:28:

А не пробовал
var
p, m: ^PData;

Ответить   Sat, 25 Dec 2004 07:07:40 +0600 (#287173)

 

Привет janalex,

Saturday, December 25, 2004, 4:07:40 AM, вы писали:

Указатель на указатель, а зачем?

Афоризм напоследок: Она ему встретилась, а он ей попался.
27 декабря 2004 г. 17:01:56

Просто студент
Eugene mailto:rav***@o*****.ru

Номер выпуска : 3908
Возраст листа : 462 (дней)
Количество подписчиков : 514
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/287531
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Подписан адрес:
Код этой рассылки: comp.soft.prog.prog
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru?subject=comp.soft.prog.prog

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Mon, 27 Dec 2004 17:02:59 +0300 (#287531)