информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеЗа кого нас держат?Портрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] 25.02.03 18:43  Число просмотров: 993
Автор: chaka Статус: Незарегистрированный пользователь
<"чистая" ссылка> <обсуждение закрыто>
> Бред. Даже не поленился сейчас тестик написать. Все
> работает нормально (что и не удивительно). В противном
> случае куча проектов бы давно отвалились, это раз, а два:

Вот это уже обидно. Зачем сразу бред? Ты действительно сделал, проверил, работает. Отлично, а теперь запусти тоже самое но под отладчиком (или просто debug-версию) и получишь объяснение моего бреда. - Assertion Failed! _CrtIsValidHeapPointer(pUserData). А в релизе, где у тебя все работает - ты освобождаешь кусок адресного пространства в куче исполняемого модуля и раз "у тебя все работает", то довольно успешно, но, вот когда кто-то в этом исполняемом модуле совершенно случайно вместо своих данных в куче найдет там "бред", то не обижайся, просто, при освобождении памяти, выделенной в dll ты с чистой совестью грохнул данные, предназначенные совершенно для других целей (им просто не повезло, они находились по тому же (или смежному) адресу, что и данные, выделенные в dll, только в ДРУГОЙ КУЧЕ).

P.S. А если у тебя никаких предупреждений не всплывет в debug-версии программы, то, возможно ты компилируешь exe и dll-модули, связанные с библиотекой времени выполнения по динамике, ну, а если crt у тебя скомпонована по статике, то советую подумать о смене компилятора или замене библиотеки времени выполнения (CRT).

> весь COM основан на передаче указателей между модулями (мы
> говорим сейчас об одном процессе ! так что, умных слов типа
> "маршалинг" - не надо !).

Весь COM построен на принципе подщета ссылок, а не передаче указателей.
В результате подсчета ссылок если Release() возвращает 0, то память, выделенная под объект, освобождается, но это происходит в коде того модуля, КОТОРЫЙ ВЫДЕЛИЛ память под класс. Это происходит потому, что фабрика по созданию объектов и сам объект (который сам себя уничтожает) находятся в ОДНОМ модуле (exe или dll)
<programming> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach