| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Укажите на ошибки в упражнении |
| Автор: zim22 22.1.2009, 12:01 | ||
| Необходимо было выполнить упражение из книги. Я выполнил, но думаю что ошибся в понимании самого упражнения или использованных типов данных. Укажите, пожалуйста, где я ошибся. Задание: 1) Напишите программу, читающую строки в вектор. 2) Скопируйте этот вектор в массив указателей на тип char. 3) Для каждого элемента вектора создайте новый символьный массив и скопируйте данные из элемента вектора в этот символьный массив. 4) Затем поместите указатель на символьный массив в массив символьных указателей. 5) Затем отобразите содержимое вектора и массива. 6) После отображения не забудьте удалить символьные массивы. 6 пункт не знаю, как сделать... Если удалять их в том блоке, где оператор new использую, то данные стираются и следовательно отобразить их в пункте 5) я не смогу...
|
| Автор: Andrey44 22.1.2009, 12:19 | ||
А это как? Статически? |
| Автор: zim22 22.1.2009, 12:36 | ||||||
| Andrey44, это динамически Я имел ввиду, что нельзя написать строчку
после этой:
т.к. данные сотрутся и ниже по коду я не смогу их отобразить оператором cout пытаюсь символьные массивы удалять ниже (закомментировал строчку в коде)
код компилируется, но во время выполнения приложение завершается с крит.ошибкой: Debug Assertion Failed! Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) |
| Автор: mes 22.1.2009, 12:40 | ||
а виновата строчка 20, к тому же блок 17-21 бессмысленный |
| Автор: Andrey44 22.1.2009, 12:40 |
| zim22, ты смотрел чему равно ix когда ты вызываешь delete [] acp[ix]; ? |
| Автор: zim22 22.1.2009, 13:33 | ||||||
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. >// вывод вектора вижу , а где вывод массива ? вывод массива здесь:
|
| Автор: zim22 22.1.2009, 16:34 | ||||||||||
я создал 6 элементов, а не 3. здесь "создаётся" (на самом деле Присваивается, правильно?) 3 элемента:
плюс здесь ещё 3:
итого 6 элементов содержится в переменной acp ***** добавлено 1 секунду спустя: гениально! я понял в чём ошибка была! В самом нижнем цикле нужно поменять
на
и я буду удалять как раз те 3 строки(последних), которые создавал оператором new. а первые 3 строки я не мог удалить, т.к. они принадлежали вектору? |
| Автор: mes 22.1.2009, 17:49 | ||
вот вот. рад, что Вы сами дошли до понимания только прибавления не достаточно.. надо ограничеть цикл до 3х . |
| Автор: zim22 22.1.2009, 22:28 |
| mes, спасибо за напутствующие подсказки. это прекрасное чувство, когда на тебя "ни-с-того, ни-с-сего" снизоходит озарение и ты понимаешь что в коде было неверно |