Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: указатели и указатели на указатели.  (Прочитано 15286 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
psl
Гость
« : 26-02-2005 07:52 » 

Такая проблема - есть два массива - массив указателей и массив указателей на указатели первого массива. Проблема в том, что при освобождении памяти для указателей первого массива, "указатели на указатели" второго массива могут указывать на нулевые адреса, а доступ приводить к исключению.
В принципе проблема решена - но вариант не вполне устраивает, ибо изредка возникают исключения, а обрабатывать их по идеологическим причинам я не могу:(.

Вопрос: существуют ли стандартные/нестандартные решения? Где почитать? Можно ли как-нибудь локализовать причину подобного исключения в отладчике VC?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 26-02-2005 10:33 » 

После освобождения указателя в первом массиве, просканируй второй на предмет поиска первого указателя и обнули его. Конечно, если ты используе указатели второго массива без проверки, то сбои никуда не денутся.

А вообще-то, мне кажется, что дело в логике - надо лучше продумать. Если опишешь задачу, то попробуем дать совет, как лучше решить ее.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Pu
Большой босс

ru
Offline Offline
78


« Ответ #2 : 26-02-2005 12:03 » 

 используй так называемые smart pointers, реализации есть в различных библиотеках например в Boost, Loki , да и в STL так же есть такой класс auto_ptr.
описание что это такое  с примерами и описанием реализаций - почитай в книжке Джефф Элджер - "C++ for real programmers"
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Serega
Гость
« Ответ #3 : 26-02-2005 20:53 » 

Pu, auto_ptr не стоит использовать, он не предназначен для хранения в контейнерах
Это просто указатель со стратегией владения (т.е. при удалении указателя удаляется и обьект на который он указывает), у Мейерса в Efficient STL много написано о том, где хорошо использовать auto_ptr а где не стоит
Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #4 : 27-02-2005 12:25 » 

Serega, есть такая штука, читал...  просто я про контейнеры речи не вел, потому и присоветовал. А вообще в той жеж книге  Effective STL рекомендуется конечно вместо динамических массивов [] пользоваться контейнерами.
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Serega
Гость
« Ответ #5 : 27-02-2005 14:04 » 

Указатели хорошо сделаны в Boost
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 28-02-2005 06:10 » 

psl,

Насколько критично использовать С/С++ с ручным управлением памяти?  Может быть возможно испопользовать сборщик мусора?
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
psl
Гость
« Ответ #7 : 28-02-2005 20:46 » 

дело в следующем:
имеется структура данных, указатель на которую передается некоторому классу, этот класс меняет структуру по определенному алгоритму и взводит флаг или каким-либо другим образом извещает о готовности. Естественно - асинхронно и естественно эта структура не одна, а массив.
auto_ptr не подойдет.

В данный момент не интересуют утечки памяти, интересует как грамотно определить в классе, что структура освобождена по той или иной причине.
в принципе сейчас с целью отладки добавлен указатель на "указатель на указатель"Улыбаюсь и метка - но мне не нравится, должно же быть лучшее решение, но без обработки исключения.

2npak: что понимать под сборщиком мусора? как он должен работать?
Записан
Serega
Гость
« Ответ #8 : 28-02-2005 22:05 » new

SharedPtr и WeakPtr из Boost
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines