![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Народ Сишный! Слышал я раньше, что в VC (а может и на уровне какой-то стандартной библиотеки) реализовано автоматическое управление памятью. Так вот недавно я с ним столкнулся вплотную - создал объект с помощью new, а потом в деструкторе одного класса(объект - член класса) хочу этот объект удалить с помощь delete. Фиг! Компилятор мне с усмешкой говорит, что объект уже, мол, давно не существует! Опоздал, простофиля! Надо сказать - переменная класса объявлена статически в глобальной области. Как мне сие умное творение отключить? Зачем - не спрашивайте, посмотрите на ник и всё понятно станет
Буду благодарен любой идее... |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Как он это говорит? access violation?
--------------------
|
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Типа того, счас точно не помню. Сам проект дома(я на работе).
|
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
См auto_ptr
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Так я понял?
--------------------
|
||||
|
|||||
| Олег М |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Да? Это где ж ты такое слышал?
Дай лучше код позырить - вдруг и правда автоматическое управление памятью! А так, на словах, нифига не понятно. |
||||
|
|||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Нет, не так. Вот:
class X { X() { i = new int[..]; } virtual ~X() { delete [] i; }// Вот тута бьють int i; }; X x;// А вот объект класса |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Вот так попробуй
|
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
_gc? --------------------
|
||||
|
|||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Я уже не мальчик по программерским меркам
Это была просто опечатка. Именно так у меня и есть. |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 3 Всего: 172 |
-------------------- |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Точно не где больше не удаляешь? Проверь остальной код, ошибка где-то там, управления памятью в VC, насколько мне известно нет. |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Domestic Cat
Именно это я им ел в виду 2Маньяк Может у тебя в деструкторе локальная i есть? А попробуй просто delete i; --------------------
|
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Всё это я проверя уж раз двадца. Результат один - объект удаляется до меня. Именно по этому факту я и понял, что это либо глюк(мой или компилятора) либо автоматическое высвобождение...
|
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Автоматического освобождени в чистом С++ AFAIK нема.. Значит это твой глюк --------------------
|
||||
|
|||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Ок, я дома сделаю простенький проект. Скомпилю и посмотрю. Если будет таже фигня, прошу проделать мой опыт ещё кому-нибудь...
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Попробуй дебаггером отловить место, откуда деструкция происходит первый раз
В Си++ такое случается иногда. Осоменно там, где бы никогда не догадался... Передал указатель куда нибудь, а там его раз и деструктировали Или Длльки деструктируют чё нить, или ДЛЛь в дебаг скомпилена Если окажется, что при первом вызове деструктора поинтер уже кривой, то придётся конечно долго искать.. Есть правда неплохая утилита. Ловит утечку памяти и возникновение ислючений... Счас линьк посмотрю... http://www.codeproject.com/tools/leakfinder.asp Заинклудай в свой проект. Он создают файл с ексцепшонами и файл с утечкой. Очень удобно Но недеюсь всё таки не придётся столько искать. А насчёт автоматики в Вижуале Всегда, когда вылезает assert - это Вижуал ПС: Кстати Компилятор не может такого говорить |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Вот это уж да Насчёт мемориликов, БаундсЧекером можешь пройтись.. (я правда никогда не пользовался :-/) --------------------
|
||||
|
|||||
| ManiaK |
|
||||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Итак. Эпопея продолжается.
Объект x удаляется раньше, чем вызывается для него деструктор. Парадокс? Причём если сделать так:
Усё будет в порядке. |
||||
|
|||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Создание обьекта на стёке? --------------------
|
||||
|
|||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Не понял, при чём тут приведённая цитата и стек. Создаётся динамический объект.
|
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
C++Builder 6. Без проблем
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Visual C++ 2003, всё нормально...
--------------------
|
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Сории за проступ. Код немного другой. Не работает именно в 6ой студии. Может это у них глюк?
|
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
всё пашет... :-/
Добавлено @ 12:37
Скажем так - небольшая особенность --------------------
|
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |