![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
ангел |
![]()
Сообщение
#1
|
Гость ![]() |
Ошибка у меня возникает при вызове этой процедуры...
Либо указатель пустой или число освобождамых байтов выходит за границы кучи ??? вот код:
|
Гость |
![]()
Сообщение
#2
|
Гость ![]() |
дополнение:
pStackElem = ^StackElem; |
ангел |
![]()
Сообщение
#3
|
Гость ![]() |
Вроде бы все так делаю:
сколько выделил места в памяти под указатель - столько и освобождаю: ... ... |
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Ты в операторе Move используешь указатель вместо самой величины. Этим самым ты портишь пойнтер.
procedure Push(E:Element;var S:Stack); -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
int64 |
![]()
Сообщение
#5
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
Lapp |
![]()
Сообщение
#6
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
ужас! какая глупая ошибка моя ... ![]() ![]() Хочешь совет? Если совсем ничего не получается долгое время, то начинай убирать из программы все "несущественное". Либо на некотором этапе ошибка пропадет (как сейчас), либо ты упростишь себе задачу, освободившись от шелухи. Успехов! -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
А ошибка по-прежнему возникает...
![]() Переезжаем в Задачи... |
int64 |
![]()
Сообщение
#8
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Репутация: ![]() ![]() ![]() |
А ошибка по-прежнему возникает... ![]() Переезжаем в Задачи... угу возникает - уже пофиксил ![]() а именно это исправил: Код procedure Pop(S:Stack;var E:Element); на Код procedure Pop(var S:Stack;var E:Element); TO lapp: да действительно не впервые.... хотя некоторые участки кода я убирал (комментировал) все равно не решало проблему... Все зависит от того насколько грубо мы ошиблись ) |
int64 |
![]()
Сообщение
#9
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Репутация: ![]() ![]() ![]() |
еще один вопрос касаемый реализации стека...
Размер одного элемента стека. Я таким образом его задал - Код sizeOne=Sizeof(Element)+SizeOf(pStackElem)*2+SizeOf(Pointer); исходя из определенных типов данных Код StackElem = record {Элемент стека} Elem:Pointer; {указатель на данные} Next:pStackElem; end; Stack = record Top: pStackElem; Size: Integer; end; Element = record ..... end; я правильно рассудил? |
Bokul |
![]()
Сообщение
#10
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
А почему нельзя просто
sizeOne=Sizeof(StackElem) ? -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата А почему нельзя просто Потому что это будет "неправильный мед" (С) Винни-Пух... Стек содержит указатель, который в свою очередь содержит адрес выделенной памяти, а насколько я понимаю автора, ему нужен именно размер области памяти, занимаемый самой структурой + той областью, где хранятся данные; то есть, насколько уменьшилось количество доступной памяти в куче при размещении в стеке очередного элемента... |
int64 |
![]()
Сообщение
#12
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo верно рассудил
![]() но ведь мне не очень то понятно что именно является "размером стека" - не путать с количеством элементов в стеке... Размер которые занимают данные? или размер всего структуры организации стека? ну я выбрал последнее... правда на самом деле в из кучи при создании очередного элемента (путем new и GetMem) берется больше байтов чем в sizeOne.. |
Bokul |
![]()
Сообщение
#13
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Цитата правда на самом деле в из кучи при создании очередного элемента (путем new и GetMem) берется больше байтов чем в sizeOne. Это ты о чем? -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата Это ты о чем? О том, что GetMem/New выделяют память блоками с размером кратным 8... ![]() |
Bokul |
![]()
Сообщение
#15
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Цитата правда на самом деле в из кучи при создании очередного элемента (путем new и GetMem) берется больше байтов чем в sizeOne. Это мы знали. ![]() Цитата берется больше байтов чем в sizeOne.. Ну тогда, если это и имелось ввиду, то правильней будет - больше или ровно... -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:32 |