![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| T0ohtik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 9.2.2008 Репутация: нет Всего: 1 |
Привет! Я пытаюсь реализовать Список на С++. Столкнулся с такой проблемой. После того как я добавил в список 4 элемента, я пытаюсь вывести их на экран и тут программа вываливается. В режиме отладки элементы в массив занеслись корректно.
В выводе ничего хитрого нет:
вывалиавется на строке cout<<nValue<<"\n";. Причем не зависимо от того выводить из перемееной или статически заданого значения. Ну и самое для меня не понятное - это то, что сбой происходит в файле mlock.h в функции LeaveCriticalSection. В следствии чего это может происходить? |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Не проще ль использовать std::list?
|
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
cout без причины не валится. скорее всего программа уже порушена до начала do/while
|
|||
|
||||
| T0ohtik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 9.2.2008 Репутация: нет Всего: 1 |
Проще то проще
Как найти это место. Я просто даже и не знаю где и скать. Массив вроде заполняется правильно. Та и строк там буквально 10 - 15 Это сообщение отредактировал(а) T0ohtik - 8.5.2008, 22:27 |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
LeaveCriticalSection тут не причем, это winapi функция, использующаяся в многопоточных программах
*применяет телепатичесские способности* скорее всего у тебя происходит разименование непроинициализированного или нулевого указателя |
|||
|
||||
| T0ohtik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 9.2.2008 Репутация: нет Всего: 1 |
Вот выкладываю проект. Посмотрите пожалуйста.
Присоединённый файл ( Кол-во скачиваний: 4 )
List.rar 7,50 Kb |
|||
|
||||
| T0ohtik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 9.2.2008 Репутация: нет Всего: 1 |
Я так подозреваю, что ошибка кроется в выделении памяти при методе Push
Можно ли так изменять размеры массива? Как можно реализовать аналог Cи функции realloc, кроме как memcpy? |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
LIST *list = new(list) LIST[nCountElements]; ;
|
|||
|
||||
| T0ohtik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 9.2.2008 Репутация: нет Всего: 1 |
Не я думаю мне надо что-то примерное такое. В list у меня хранится массив структур. При добавлении еще одной, мы выделяем размер на 1 элемент больше предыдущего, и этот выделенный кусок памяти инициализируем уже существующим list.
а таким образом мы просто выделим новый кусок памяти и затрем им старый. Я ж говорю надо что-то типа realloc только на. С++ |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
ниче старого мы не затрем. Твой способ по твоему нормальный? а если следом за list идут какие то данные? ты об этом подумал? либо сразу резервируй большое количество памяти, либо при нехватки памяти выделяй новый блок в другом месте. И вообще че то я твоего кода не понял, списко должен быть один. А в нем много элементов, причем они могут находится в совершенно разных местах памяти и соединяются только указателями. |
|||
|
||||
| T0ohtik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 9.2.2008 Репутация: нет Всего: 1 |
Ну если бы мой код был нормальный, я, наверное сюда не писал бы
А по какому принципу организован std::list, я думаю, новая память выделяется по мере добавления, а не сразу большим куском и адрес следующего элемента указывается в специальной переменной (т.е. элементы списка и так связаны указателями)? |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
| T0ohtik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 9.2.2008 Репутация: нет Всего: 1 |
Списки с векторами я не перепутал, я перепутал логику работы оператора new. Свою ошибку осознал. Про реализацию списка я читал.
Вот, что-то типа того. У меня возни вопрос, а как получит доступ к произвольному члену. Например, в списке 1000 элементов, а надо добраться до 500 элемента, не будешь же писать цикл на 500 повторов. И как будет выглядеть деструктор для такого списка? |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
| T0ohtik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 9.2.2008 Репутация: нет Всего: 1 |
А как же будет выглядеть деструктор? delete []list, здесь же не подходит. Тоже в цикле удалять?
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |