![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| H4nter |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
При программировании шаблона динамического списка и последующим тестировании возникает такая ошибка в самом конце выполенения программы пишет "null pointer assigment"
Я понимаю, что какой-то указатель ссылается на null и я просто возможно в деструкторе класса списка не удаляю его... Но отследить, какой, я просто не могу, так как она возникает в самом самом конце выполнения программы, и при завершении она сначала пишет эту строчку, а потом завершает прогу. Причем заметил, если использовать этот шаблон списка не для хранения объектов, а например примитивного типа int
то такой ошибки не возникает, а если хранить какой-нибудь объект, например точку
то сразу возникает подобная ошибка... кто то возможно сталкивался с подобным? |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
это в ветку по C# нужно (или C++ мелкософтский)
здесь же чистый C++ Это сообщение отредактировал(а) Alek86 - 12.5.2008, 16:51 |
|||
|
||||
| H4nter |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
так у меня вопрос по чистому С++ Где ты тут C# видишь?
мой вопрос как раз таки и подходит под ветку "Общие вопросы по С++" |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
что-то ни List ни Point в чистых сях не вспоминаются а угадывать, что за ними скрывается можно долго... может это все-таки управляемый мелкософтский? |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
аа... тормозю
тогда код в студию, наверное желательно предельно урезанный |
|||
|
||||
| H4nter |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
Вот собственно список, выкинул некоторые ненужные методы, дабы урезать код на сколько это возможно
Вот код звена списка:
Вот если использовать этот шаблон списка, для объектов, возникает именно то сообщение при завершении... Думал чтот баг в методе remove, но если закоментировать вызов метода remove в деструкторе, то все равно Это сообщение отредактировал(а) H4nter - 12.5.2008, 18:40 |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
в общем, код не компилится, а без дебага разбирать его нужно долго
так что или постарайся привести в компилируемое состояние (желательно в 1 файле) или сам продебажь (как видно, ты пользовался чем-то типа trace, но этот способ намного хуже дебага, уж поверь) |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Так создай коротенький список из пары элементов и пройдись пошагово -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Судя по "null pointer assigment" у тебя что то вроде BC++ 3.1 Возьми компилятор поновее и под Win32 и прогони свою программу на нем, получишь свой 'null pointer' сразу а не в конце программы
|
|||
|
||||
| H4nter |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
насчет BC++ 3.1 это ты верно подметил, интересно, а почему в новее версии должно быть в начале?
Alek86, ты где компилировал код? Если в BC++ 3.1 то там должно все компилить... В других IDE не пробовал компилить, да мне и не надо. Ошибка пишется в самом конце, там никакой дебаг не поможет... |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
ты бы попробовал, а потом утверждал. Какая разница для дебагера в начале или конце дебажить? Добавлено через 3 минуты и 31 секунду
у тебя функции не все определены. Линковаться это не будет. А на бумажке тебе никто дебажить не будет |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Я уже где то освещал этот вопрос. BC 3.1 ДОСосвский компилятор, а под ДОСом никакой защиты памяти нет, т.е. программа может писать что угодно по каким угодно поинтерам (в том числе и нулевым). В startup'е от BC 3.1 применена специальная хитрость - несколько начальных байтов в сегменте данных заполнены специальной сигнатурой, startup по завершению программы проверяет, что сигнатура не изменилась, и если это не так, то делается вывод, что в эту область была запись (и скорее всего по нулевому поинтеру) о чем и выдается сообвествующее предупреждение. В новых компиляторах под Win32 есть аппаратная защита памяти и любая попытка записи по нулевому (или около того) поинтеру приведет к немедленному прерыванию и останову программы, отладчик при этом покажет место, где это произошло. Добавлено через 10 минут и 50 секунд
Для ДОСовского компилятора есть разница - это сообщение пишет не дебагер а startup программы
|
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
|
|||
|
||||
| H4nter |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
xvr, спасибо тебе большое за объяснение!
Счас в качестве типа Т использую не объект а указатель на него, и ошибки такой больше нет. Получается, что если в качестве Т подставлять объект (а не указатель на него) то в присваивании header = NULL; объект Т, содержащийся в header, будет "пытаться" создаться по нулевому адресу... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |