![]() |
|
Модераторы: bsa |
![]()
|
|
| Ukrajinec |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 6.4.2009 Репутация: нет Всего: нет |
Доброго дня суток!
Помогите из решением. Задача: нужно составить программу с помощью которой создается некий массив записей (строчек) типа char (тоесть это, по сути, двумерный массив типа char) и это надо сделать с помощью классов. Вот как это вижу я: заголовочный файл
файл с функциями (здесь много чего не доделано, сейчас интересует именно реализация класса):
Вопрос как сделать так, чтоб создавался динамический массив, потому как именно на создании массива стопорит вся программа? Это сообщение отредактировал(а) Ukrajinec - 14.1.2015, 21:17 |
||||
|
|||||
| feodorv |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
И правильно делает. Ведь Вы создаёте одномерный(!) массив, а указатель на него кладете по адресу *cl_, при этом сам cl_ никак не инициализирован (то есть cl_ мусорное, следовательно, *cl_ указывает неизвестно куда, может и в защищенную область памяти процесса). Как я понял, Вам нужен именно двумерный массив и именно типа char**, так? В таком случае сначала нужно запросить память на массив указателей:
Деструктор:
Что Вы здесь пытаетест скопировать? Сначала Вы задали значение для *(cl_ + i) как new char[len] (причем на завершающий ноль память не выделена), затем это самое значение перезаписываете величиной &a. Итог: строка не скопирована (скопирован адрес строки, но не сама строка), плюс утечка памяти.
В чем смысл устанавливать n_ в ноль, но при этом запрашивать память? Это сообщение отредактировал(а) feodorv - 15.1.2015, 06:37 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||||||
|
|||||||||||
| Ukrajinec |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 6.4.2009 Репутация: нет Всего: нет |
Оказывается я напрочь забыл указатели( Спасибо, кажется разобрался но у меня появился еще 1 вопрос:
вместо
,
не освободит полностью память, обязательно ее почленно освобождать? |
||||
|
|||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Обязательно -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| Ukrajinec |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 6.4.2009 Репутация: нет Всего: нет |
появился следующий вопрос:
почему в строчке
звездочка подчеркивается и пишет что "error C2664: "bool List::addList(const char *,int)": невозможно преобразовать аргумент 1 из "char" в "const char *"? |
|||
|
||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Потому что оператор * в данном случае является разыменователем, т.е. ты передаешь в функцию тип не указатель на char, а переменную char. -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| Ukrajinec |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 6.4.2009 Репутация: нет Всего: нет |
||||
|
||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
-------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
|
|||
|
||||
| Ukrajinec |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 6.4.2009 Репутация: нет Всего: нет |
не могу понять в чем проблема. Здесь снова выкидывает((
заголовочный файл
файл с функциями
исполнительный файл
Добавлено через 3 минуты и 6 секунд спасибо! В будущем учту. |
||||||
|
|||||||
| Ukrajinec |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 6.4.2009 Репутация: нет Всего: нет |
кстати, вылетает программа всегда на резервирование памяти, независимо от того какой конструктор используется, по умолчанию или нет
|
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
||||
|
||||
![]()
|
| Правила форума "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. |