![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Bokul |
![]()
Сообщение
#21
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Супер, спасибо!!!
any_arr.count_each(new(PTfloat)); А можно брать TypeOf типа? У него же нет VMT... Или есть? -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
![]()
Сообщение
#22
|
Гость ![]() |
Цитата А можно брать TypeOf типа? У него же нет VMT... Смотрим в документацию:Цитата(TP Help) TypeOf (function) Значит, можно Returns a pointer to an object type's virtual method table. Declaration: procedure TypeOf (Param1: ObjectType) : Pointer Remarks: Param1 is either an object type identifier or an instance of an object type. Can only be applied to object types that have a VMT; all other types result in an error. ![]() |
Bokul |
![]()
Сообщение
#23
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Спойлер (Показать/Скрыть)
Сообщение отредактировано: Bokul - 26.11.2006 4:56 -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
![]()
Сообщение
#24
|
Гость ![]() |
Bokul
![]() Спойлер (Показать/Скрыть)
|
мисс_граффити |
![]()
Сообщение
#25
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Цитата У него вообще ничего нет, главное, чтобы VMT могла быть у экземпляра этого типа... Значит, я слегка увлеклась и obj_int^.Create; на компиляцию не повлияют. что с ними, что без них... volvo, я же уточнила, что код будет только компилироваться. Это, конечно, для корректной работы необходимо, но не достаточно. По поводу корректной работы. Спойлер (Показать/Скрыть)
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#26
|
Гость ![]() |
мисс_граффити
![]() ![]() ![]() Если бы все было так просто, неужели же я стал бы задавать этот вопрос? ![]() |
мисс_граффити |
![]()
Сообщение
#27
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Расскажешь, как на самом деле?
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#28
|
Гость ![]() |
Цитата Расскажешь, как на самом деле? ![]() Спойлер (Показать/Скрыть)
... очередной вопрос: где именно (желательно показать конкретные строки кода, и рассказать, почему именно тут) происходят в этой программе утечки памяти, и как нужно переделать программу (НЕ меняя иерархию объектов), чтобы убрать утечки, и добиться полностью правильной ее работы? О том, что это за структура: Это что-то напоминающее кортеж языка Python, только с изменяемыми элементами... |
мисс_граффити |
![]()
Сообщение
#29
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Цитата Чем же непонятное? Указатель описан, как указатель на базовый класс, значит, в любом случае, в массиве будут указатели на экземпляры одного из типов в цепочке наследования... Спойлер (Показать/Скрыть)
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#30
|
Гость ![]() |
Цитата Почему так? А что, собственно, вызывает сомнения? Три объекта в иерархии, три адреса VMT... То, что есть четвертое значение? ![]() any_arr.set_index(4, nil);и посмотри на содержимое Evaluate ...arr[4]^ и ...arr[5]^ |
мисс_граффити |
![]()
Сообщение
#31
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
те же Ptr(DSeg,$1068)
соответственно, typeof(arr[4]^)<>typeof (объект одного из классов T,TInt,TFloat) так? или я что-то совсем неправильно понимаю? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#32
|
Гость ![]() |
Ну, естественно... Какой же тип у NIL-а? Вообще-то, обращение по nil^ приводит к тому, что в С++ называется UB (Undefined Behavior)... НЕЛЬЗЯ этого делать... Поэтому, какой бы результат ты не получила - он будет некорректным, если значение указателя эквивалентно NIL
|
Bokul |
![]()
Сообщение
#33
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Спасибо за ссылку.
Цитата Дело все в том, что TypeOf возвращает адрес VMT для объекта Т.е. она просто читает это поле: Цитата Это 16-битовое поле, называемое полем таблицы виртуальных методов (VMP), используется для запоминания смещения таблицы виртуальных методов в сегменте данных. ? Цитата и как нужно переделать программу (НЕ меняя иерархию объектов),чтобы убрать утечки, и добиться полностью правильной ее работы? Так поможет?
-------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
![]()
Сообщение
#34
|
Гость ![]() |
Нет, так не пойдет... Это не выход... Ты не убираешь утечки, а просто стираешь следы их присутствия... Я имел в виду "не допускать появления утечек"...
P.S. Заметь, я не сказал "Не изменяя объекты", я сказал "Не изменяя иерархию", т.е. не добавляя новых типов перед базовым, и между предком и потомком... |
мисс_граффити |
![]()
Сообщение
#35
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Ну, естественно... Какой же тип у NIL-а? вот я его непонятным и обозвала... и написала, что он определится, но как... -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Bokul |
![]()
Сообщение
#36
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Цитата где именно происходят в этой программе утечки памяти Утечка происходит тогда, когда мы берем больше с кучи, чем возвращаем, да? Если да, то я не вижу ни одного dispose в проге... Или я что-то путаю? -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
![]()
Сообщение
#37
|
Гость ![]() |
Цитата Если да, то я не вижу ни одного dispose в проге Да... Вот я и не поставил Dispose... Попробуешь сделать это? ![]() |
Bokul |
![]()
Сообщение
#38
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Цитата Да... Вот я и не поставил Dispose... Это хорошо, а я ищу не знаю что... Цитата Попробуешь сделать это? Ага, теперь ясно в чем задача. Цитата any_arr.count_each(new(PTfloat, create )); Я так понял, что мы остановились на таком вызове этого метода? Сдесь не происходит выделения памяти кроме как для указателя? -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
![]()
Сообщение
#39
|
Гость ![]() |
Цитата(Bokul @ 27.11.2006 1:39) Я так понял, что мы остановились на таком вызове этого метода? Сдесь не происходит выделения памяти кроме как для указателя? ![]() |
Bokul |
![]()
Сообщение
#40
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Цитата Как так не происходит? А экземпляр объекта где хранится? Не в указателе же... any_arr.count_each(new(PTfloat, create )); Ну тогда все понятно, мы передаем указатель на объект в процедуру any_arr.count_each (не зная его), он там копируется. Выходит мы получаем два указателя на один объект - один локальный (копия) и второй - который мы не знаем. Мне интересно, что делает Паскаль с этим неизвестным? От этого и зависит, наверное, решение... ИМХО. Сообщение отредактировано: Bokul - 27.11.2006 2:54 -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 17:36 |