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

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

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

> Freemem
сообщение
Сообщение #1


Гость






Ошибка у меня возникает при вызове этой процедуры...
Либо указатель пустой или число освобождамых байтов выходит за границы кучи ???
вот код:

procedure Push(E:ElementType;var S:Stack);
var
P:pStackElem;
begin
P:=new(pStackElem);
GetMem(P^.Elem,SizeOf(ElementType));
Move(E,P^.Elem,SizeOf(ElementType));
P^.Next:=S.Top;
S.Top:=P;
S.Size:=S.Size+Sizeof(ElementType)+SizeOf(pStackElem)*2+SizeOf(Pointer);
end;

procedure Pop(S:Stack;var E:ElementType);
var top:pStackElem;
begin
if S.Top<>nil then
begin
Move(S.Top^.Elem,E,SizeOf(ElementType));
top:=S.Top^.Next;
FreeMem(S.Top^.Elem,SizeOf(ElementType));{Вот здесь и возникает ОШИБКА!!!}
dispose(S.Top);
S.Top:=top;
S.Size:=S.Size-Sizeof(ElementType)-SizeOf(pStackElem)*2-SizeOf(Pointer);
end
end;

 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






А ошибка по-прежнему возникает... smile.gif

Переезжаем в Задачи...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
ангел   Freemem   30.11.2006 6:17
Гость   дополнение: pStackElem = ^StackElem; pElement = ^…   30.11.2006 6:39
ангел   Вроде бы все так делаю: сколько выделил места в па…   30.11.2006 17:44
lapp   Ты в операторе Move используешь указатель вместо с…   30.11.2006 18:56
int64   Ты в операторе Move используешь указатель вместо …   30.11.2006 19:27
lapp   ужас! какая глупая ошибка моя ... :wacko: не…   30.11.2006 19:40
volvo   А ошибка по-прежнему возникает... :) Переезжаем в…   30.11.2006 19:41
int64   А ошибка по-прежнему возникает... :) Переезжаем …   30.11.2006 19:44
int64   еще один вопрос касаемый реализации стека... Разме…   30.11.2006 19:55
Bokul   А почему нельзя просто sizeOne=Sizeof(StackElem) …   1.12.2006 9:27
volvo   Потому что это будет "неправильный мед" …   1.12.2006 13:09
int64   volvo верно рассудил :good: но ведь мне не очен…   2.12.2006 5:10
Bokul   Это ты о чем?   2.12.2006 5:15
volvo   О том, что GetMem/New выделяют память блоками с ра…   2.12.2006 5:36
Bokul   Это мы знали. :) Ну тогда, если это и имелос…   2.12.2006 5:41


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

 





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