| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Автоматическое управление памятью |
| Автор: ManiaK 3.9.2004, 15:47 |
| Народ Сишный! Слышал я раньше, что в VC (а может и на уровне какой-то стандартной библиотеки) реализовано автоматическое управление памятью. Так вот недавно я с ним столкнулся вплотную - создал объект с помощью new, а потом в деструкторе одного класса(объект - член класса) хочу этот объект удалить с помощь delete. Фиг! Компилятор мне с усмешкой говорит, что объект уже, мол, давно не существует! Опоздал, простофиля! Надо сказать - переменная класса объявлена статически в глобальной области. Как мне сие умное творение отключить? Зачем - не спрашивайте, посмотрите на ник и всё понятно станет Буду благодарен любой идее... |
| Автор: chipset 3.9.2004, 15:50 |
| Как он это говорит? access violation? |
| Автор: ManiaK 3.9.2004, 15:51 |
| Типа того, счас точно не помню. Сам проект дома(я на работе). |
| Автор: Vyacheslav 3.9.2004, 15:52 |
| См auto_ptr |
| Автор: chipset 3.9.2004, 15:53 | ||
Так я понял?
|
| Автор: Олег М 3.9.2004, 15:55 | ||||
Да? Это где ж ты такое слышал?
Дай лучше код позырить - вдруг и правда автоматическое управление памятью! А так, на словах, нифига не понятно. |
| Автор: ManiaK 3.9.2004, 15:55 |
| Нет, не так. Вот: class X { X() { i = new int[..]; } virtual ~X() { delete [] i; }// Вот тута бьють int i; }; X x;// А вот объект класса |
| Автор: Олег М 3.9.2004, 16:01 | ||
Вот так попробуй
|
| Автор: chipset 3.9.2004, 16:03 | ||
_gc? |
| Автор: ManiaK 3.9.2004, 16:04 |
| Я уже не мальчик по программерским меркам Это была просто опечатка. Именно так у меня и есть. |
| Автор: Domestic Cat 3.9.2004, 16:05 | ||
http://www.developer.com/net/cplus/article.php/3366991 |
| Автор: Олег М 3.9.2004, 16:07 | ||
Точно не где больше не удаляешь? Проверь остальной код, ошибка где-то там, управления памятью в VC, насколько мне известно нет. |
| Автор: chipset 3.9.2004, 16:08 |
| Domestic Cat Именно это я им ел в виду 2Маньяк Может у тебя в деструкторе локальная i есть? А попробуй просто delete i; |
| Автор: ManiaK 3.9.2004, 16:09 |
| Всё это я проверя уж раз двадца. Результат один - объект удаляется до меня. Именно по этому факту я и понял, что это либо глюк(мой или компилятора) либо автоматическое высвобождение... |
| Автор: chipset 3.9.2004, 16:11 | ||
Автоматического освобождени в чистом С++ AFAIK нема.. Значит это твой глюк |
| Автор: ManiaK 3.9.2004, 16:21 |
| Ок, я дома сделаю простенький проект. Скомпилю и посмотрю. Если будет таже фигня, прошу проделать мой опыт ещё кому-нибудь... |
| Автор: sergejzr 3.9.2004, 16:54 |
| Попробуй дебаггером отловить место, откуда деструкция происходит первый раз В Си++ такое случается иногда. Осоменно там, где бы никогда не догадался... Передал указатель куда нибудь, а там его раз и деструктировали Или Длльки деструктируют чё нить, или ДЛЛь в дебаг скомпилена Если окажется, что при первом вызове деструктора поинтер уже кривой, то придётся конечно долго искать.. Есть правда неплохая утилита. Ловит утечку памяти и возникновение ислючений... Счас линьк посмотрю... http://www.codeproject.com/tools/leakfinder.asp Заинклудай в свой проект. Он создают файл с ексцепшонами и файл с утечкой. Очень удобно Но недеюсь всё таки не придётся столько искать. А насчёт автоматики в Вижуале Всегда, когда вылезает assert - это Вижуал ПС: Кстати Компилятор не может такого говорить |
| Автор: chipset 3.9.2004, 17:02 | ||
Вот это уж да Насчёт мемориликов, БаундсЧекером можешь пройтись.. (я правда никогда не пользовался :-/) |
| Автор: ManiaK 20.9.2004, 11:20 | ||||
Итак. Эпопея продолжается.
Объект x удаляется раньше, чем вызывается для него деструктор. Парадокс? Причём если сделать так:
Усё будет в порядке. |
| Автор: chipset 20.9.2004, 11:24 | ||
Создание обьекта на стёке? |
| Автор: ManiaK 20.9.2004, 12:22 |
| Не понял, при чём тут приведённая цитата и стек. Создаётся динамический объект. |
| Автор: Vyacheslav 20.9.2004, 12:23 | ||
C++Builder 6. Без проблем
|
| Автор: chipset 20.9.2004, 12:28 |
| Visual C++ 2003, всё нормально... |
| Автор: ManiaK 20.9.2004, 12:34 | ||
Сории за проступ. Код немного другой. Не работает именно в 6ой студии. Может это у них глюк?
|
| Автор: chipset 20.9.2004, 12:37 | ||
| всё пашет... :-/ Добавлено @ 12:37
Скажем так - небольшая особенность |