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

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

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

> Freemem
ангел
сообщение 30.11.2006 2:17
Сообщение #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;

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


Гость






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

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

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


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

 



- Текстовая версия 20.07.2025 18:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"