![]() |
|
Модераторы: bsa |
![]()
|
|
| djezul |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2009 Где: Украина , Донецк Репутация: нет Всего: нет |
Вот код -
По нему есть несколько вопросов. 1 - что это за ошибка - ![]() Какова причина её возникновения ? И как её исправить ? И почему , там где я поставил <<<<< удаляется и q , а не только p , как удалить только p ? Прога , думаю и так понятно , но всё же скажу , должна создавать динамический массив с возможностью добавления. С 1 мерными у меня всё работает , но так почему то нет . |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
скорей всего вы пишете либо за пределы массива либо удаляете статический массив. |
|||
|
||||
| djezul |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2009 Где: Украина , Донецк Репутация: нет Всего: нет |
ну по коду должно быть видно , что массив не статический, и за пределы вроде не вылетаю, тем более пишет , что в 52 строке , причем здесь она, никак не пойму.
|
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
При копировании массива (add()) копируются указатели p[i]=q[i]; затем массив q удаляется, соответственно все указатели массива p становятся недействительными. Копируя массив, копируй только содержимое, а указатели не трогай, в каждом массиве свои.
Это сообщение отредактировал(а) Albor - 3.7.2009, 16:54 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| djezul |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2009 Где: Украина , Донецк Репутация: нет Всего: нет |
||||
|
||||
| Albor |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
djezul, ты сам писал код? Если да, то должен понимать что написано. Что такое p[i] и q[i] - это указатели на char. Смотри, для q[i] ты делаешь следующее:
После этого q[i] указывает на область памяти, куда скопирована строка из surname. Дальше удаляется и вновь создаётся с новым размером массив p - нормально. Но дальше... что делает строка p[i]=q[i]? Ты просто копируешь указатель, после этого оба массива указывают на одни и те же данные, а строчка strcpy( p[i] , q[i] );? - посмотри в дебаге что ты копируешь и куда, указатели-то одинаковые, но это пол-беды (скажем даже не совсем беда, может у программера такой каприз
тогда p[i] уже не зависит от q[i]. Это сообщение отредактировал(а) Albor - 4.7.2009, 06:27 |
||||
|
|||||
| djezul |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2009 Где: Украина , Донецк Репутация: нет Всего: нет |
Albor, спасибо , я врубился в это ещё после твоего 1 поста))) просто я ж говорю , при написании подобной проги только с 1 мерным массивом указетелей, так прокатывало , поэтому решил и тут так сделать) теперь понял , что это неправильно . Твой вариант работает , спасибо)
P.S. код писал сам)) Это сообщение отредактировал(а) djezul - 4.7.2009, 16:01 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
new кидает exception, когда не может выделить память |
|||
|
||||
| djezul |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2009 Где: Украина , Донецк Репутация: нет Всего: нет |
zim22, Спасибо , буду знать)
|
|||
|
||||
| djezul |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2009 Где: Украина , Донецк Репутация: нет Всего: нет |
А как правильно сделать сортировку , мне нужно допустим по алфавиту отсортировать фамилии, вот я пытаюсь так
НО , так не работает , почемуто не хочет выделять достаточно памяти для p[i] , хотя я вроде еёудаляю , и создаю с необходимым количеством((( В чём тут ошибка? |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| djezul |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 13.6.2009 Где: Украина , Донецк Репутация: нет Всего: нет |
zim22, не просто хочу научится работе с указателями) то понятно.
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
почитайте тогда книгу Б.Кернигана, Д.Ритчи "Язык программирования С". Глава 5 "Указатели и массивы". |
|||
|
||||
| Soah |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 18.2.2009 Репутация: 6 Всего: 54 |
strcmp |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |