![]() |
|
Модераторы: bsa |
![]()
|
|
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Необходимо было выполнить упражение из книги. Я выполнил, но думаю что ошибся в понимании самого упражнения или использованных типов данных.
Укажите, пожалуйста, где я ошибся. Задание: 1) Напишите программу, читающую строки в вектор. 2) Скопируйте этот вектор в массив указателей на тип char. 3) Для каждого элемента вектора создайте новый символьный массив и скопируйте данные из элемента вектора в этот символьный массив. 4) Затем поместите указатель на символьный массив в массив символьных указателей. 5) Затем отобразите содержимое вектора и массива. 6) После отображения не забудьте удалить символьные массивы. 6 пункт не знаю, как сделать... Если удалять их в том блоке, где оператор new использую, то данные стираются и следовательно отобразить их в пункте 5) я не смогу...
|
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 2 Всего: 26 |
А это как? Статически? -------------------- ????? ??, ??????? ?????. |
|||
|
||||
| zim22 |
|
||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Andrey44, это динамически
Я имел ввиду, что нельзя написать строчку
после этой:
т.к. данные сотрутся и ниже по коду я не смогу их отобразить оператором cout пытаюсь символьные массивы удалять ниже (закомментировал строчку в коде)
код компилируется, но во время выполнения приложение завершается с крит.ошибкой: Debug Assertion Failed! Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а виновата строчка 20, к тому же блок 17-21 бессмысленный Это сообщение отредактировал(а) mes - 22.1.2009, 12:52 |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 2 Всего: 26 |
zim22, ты смотрел чему равно ix когда ты вызываешь delete [] acp[ix]; ?
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| zim22 |
|
||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Andrey44, смотрел. ix = 0; следовательно в этом участке кода
при первой итерации acp[0] указывает на строку, расположенную по индексу 0. если например при запуске программы ввести: hello my dear то 3 строки занесётся в вектор. и acp[0] будет указывать на строку "hello" так что я до сих пор не понимаю, почему оператор delete не работает mes, длину вектора и массива вывел. длина массива в 2 раза больше длины вектора. так и должно быть (как я понял) по логике работы программы. Т.к. после пункта 2 в массиве указателей содержится 3 элемента. А после п.4 ещё 3 элемента, итого 6. почему код в строках 17-21 бессмысленный? если конечно вы имеете ввиду этот участок:
Этот код выполняет пункт 2) задания: Скопируйте этот вектор в массив указателей на тип char. >// вывод вектора вижу , а где вывод массива ? вывод массива здесь:
|
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Не удивлены ?! то есть Вы в курсе, что создали три элемента, а удаляете шесть ? !!!
а..ну если того требует задание.. просто в контексте кода этот блок не имел смысла... к тому же он потенциально опасный .. сорри, опять моя невнимательность Это сообщение отредактировал(а) mes - 22.1.2009, 14:40 |
|||
|
||||
| zim22 |
|
||||||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
я создал 6 элементов, а не 3. здесь "создаётся" (на самом деле Присваивается, правильно?) 3 элемента:
плюс здесь ещё 3:
итого 6 элементов содержится в переменной acp ***** добавлено 1 секунду спустя: гениально! я понял в чём ошибка была! В самом нижнем цикле нужно поменять
на
и я буду удалять как раз те 3 строки(последних), которые создавал оператором new. а первые 3 строки я не мог удалить, т.к. они принадлежали вектору? |
||||||||||
|
|||||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
mes, спасибо за напутствующие подсказки.
это прекрасное чувство, когда на тебя "ни-с-того, ни-с-сего" снизоходит озарение и ты понимаешь что в коде было неверно |
|||
|
||||
![]()
|
| Правила форума "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. |