Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите отладить прогу, выскакивает какаято ошибка 
:(
    Опции темы
NiCketT
  Дата 23.5.2008, 03:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 10.9.2007

Репутация: нет
Всего: нет



1. Неработают деструкторы (я их закоментировал)
2. В конце проги постоянно выскакивает какая-то ошибка.
3. В релизе выскакивает та же самая (или похожая) ошибка, только уже в начале проги (т.е. релиз неработает)
Хелппп!!!  smile 

Присоединённый файл ( Кол-во скачиваний: 19 )
Присоединённый файл  coins.zip 5,00 Kb
PM MAIL   Вверх
rrrFer
Дата 23.5.2008, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.5.2008
Где: Красноярск

Репутация: 1
Всего: 1



NiCketT
у меня никаких ошибок не выскакивет, напиши где именно и какая

Это сообщение отредактировал(а) rrrFer - 23.5.2008, 09:39
PM MAIL WWW ICQ   Вверх
rainbow86
Дата 23.5.2008, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 27.10.2005

Репутация: нет
Всего: нет



А почему ты думаешь что не работают деструкторы. Если есть new значит где то должен быть delete!!! Большая вероятность того что именно из-за этого и вылетает в конце!!!

Добавлено через 2 минуты и 31 секунду
расскоментируй деструкторы и посмотри что происходит после сортировки

Код


countrys.sort(); //отсортироать



Указатели на массивы городов в второй и третьей стране становятся невалидными!!!
PM MAIL   Вверх
pilotnet
Дата 23.5.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 22.4.2008

Репутация: нет
Всего: нет



У меня вылетает на функции
Код

void City::AddMoney(unsigned wher, int how_many){
    coins[wher]+=how_many;
};

не стал разбираться 
но рекомендую убрать все массив и заменить их на вектора
и всегда проверяй индексы - это стандартная ошибка новичка(и не только новичка)
а в данном случае вообще можно отказатся от указателей и сделать все статически 
это куда надежней и никаких деструкторов не надо
PM MAIL   Вверх
bronislav
Дата 24.5.2008, 18:43 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: нет
Всего: 3



Дело, в том, что память, которая была распределена в конструкторе с пом. оператора new, автоматически т.е. без использования оператора delete освобождается в даструкторе.

Таким образом в дестуркторе ты пытаешься освободить память, которая тебе уже не пренадлежит и соответственно вылетве ошибка.


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
NiCketT
Дата 24.5.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 10.9.2007

Репутация: нет
Всего: нет



ухты! я и не знал.
т.е. можно обойтись вообще без деструкторов, я правильно понимаю?
PM MAIL   Вверх
mes
Дата 25.5.2008, 00:02 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(bronislav @  24.5.2008,  18:43 Найти цитируемый пост)
Дело, в том, что память, которая была распределена в конструкторе с пом. оператора new, автоматически т.е. без использования оператора delete освобождается в даструкторе.


с каких это пор ?!  smile 


--------------------
PM MAIL WWW   Вверх
bronislav
Дата 25.5.2008, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: нет
Всего: 3



Цитата(mes @  25.5.2008,  00:02 Найти цитируемый пост)
с каких это пор ?!

Я не знаю с каких пор, но преподователь в универе рассказывал мне так.

Потом я еще делал експеримент, выделяя память в конструкторе и не освобождая в деструкторе, и память освобождалась. Можеи это конечно и не по стандарту, но ...


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
rrrFer
Дата 25.5.2008, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.5.2008
Где: Красноярск

Репутация: 1
Всего: 1



bronislav
Цитата(bronislav @  25.5.2008,  08:19 Найти цитируемый пост)
делал експеримент, выделяя память в конструкторе и не освобождая в деструкторе, и память освобождалась.

а в какой момент она освобождалась? случаем не при завершении работы программы?

PM MAIL WWW ICQ   Вверх
Artemon
Дата 25.5.2008, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Цитата

Дело, в том, что память, которая была распределена в конструкторе с пом. оператора new, автоматически т.е. без использования оператора delete освобождается в даструкторе.

Таким образом в дестуркторе ты пытаешься освободить память, которая тебе уже не пренадлежит и соответственно вылетве ошибка.


Прошу не вводить в заблуждение людей.

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

пример:
Код

class A
{
 private:
            int* Ptr; 
 public: 
            A()
             {
             Ptr = new int[1024];
             }
             ~A()
             {
             delete [] Ptr;
             }  
};


Код

A* obj = new A;
delete obj;


В резальтате вызовится деструктор, который удалит объект A, затем вызовится delete [] Ptr, который удалит динамический массив.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
bronislav
Дата 25.5.2008, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: нет
Всего: 3



Цитата(Artemon @  25.5.2008,  07:48 Найти цитируемый пост)
Если вызвался деструктор, то значит он удалит сам объект, которому принадлежит.
А если в объекте есть указатели на которые тоже была выделена память она так и останется  выделенной, более того, она  станет недоступной. 


Cпасибо, за разъяснения! Буду знать и не вводить в заблужедние



--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
NiCketT
  Дата 25.5.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 10.9.2007

Репутация: нет
Всего: нет



Всем спасибо! Тема закрыта. Вопрос решон smile


Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  coins.zip 15,55 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0955 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.