Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
HoseMose
1 / 1 / 0
Регистрация: 27.08.2013
Сообщений: 101
#1

Двумерный массив указателей - C++

20.09.2013, 10:50. Просмотров 736. Ответов 16
Метки нет (Все метки)

Добрый день. Создаю двумерный массив для хранения символов.
C++ (Qt)
1
char MASs[255][255]
.
Вопрос в том что после заполнения массива нужно высвободить память занятую им, или же очистить его.
Как я себе это представляю:
Нужно объявить массив указателей.
Как объявить двумерный символьный массив ? И как потом сдеалть ему delete ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2013, 10:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двумерный массив указателей (C++):

Чем отличаются двумерный символьный массив и массив указателей на строки - C++
Двумерный символьный массив и массив указателей на строки. Собственно чем они отличаются? Заранее спасибо.

Указатель на двумерный массив указателей - C++
char* err = {{"abc"}, {"def"}}; char ***ptr; ptr = (char ***)err; printf("%s, %s", *err + 2, *ptr + 2);Добрый день всем, есть...

Передать двумерный массив указателей в функцию - C++
Здравствуйте) У меня есть класс Tile и структура Room. Примерно они выглядят таким образом: class Tile { private: ...

Задача на двумерный массив с использованием указателей - C++
В двумерном массиве найти строку с наименьшим произведением элементов. Размерность массива 5x6. Произведение определять с помощью...

Запись и чтение массива указателей в двумерный массив - C++
Подскажите пожалуйста, вот у меня генерируется двумерный массив в массиве указателей (int**), как мне записать массив указателей в другой...

Двумерный массив указателей присвоить другому указателю - C++
char *tp = { "bb", "vv", "zz", "kk", "" }; char ***mp = tp; // вот здесь ошибка что нужно прописать чтоб...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ilot
Модератор
Эксперт С++
1811 / 1168 / 229
Регистрация: 16.05.2013
Сообщений: 3,082
Записей в блоге: 5
Завершенные тесты: 1
20.09.2013, 11:05 #2
Да также как и со строкой, только delete прописывать для каждой строки на которые указывает массив указателей.
C++
1
2
for(int j =0; j < size; j++)
    ptrArray[j] = new char[len + 1];
C++
1
2
for(int j =0; j < size; j++)
    delete [] ptrArray[j];
1
XpertVision
17 / 17 / 3
Регистрация: 14.06.2012
Сообщений: 150
20.09.2013, 11:08 #3
Не уверен и нету возможности проверить так что попробуйте скомпилировать сами.

C++
1
2
3
4
5
char* Massiv = new mass[255][255];//обьявление массива указателей
 
cin>>Massiv[23][5];//пример работы с элементами
 
delete [][] Massiv;//удаление массива указателей.
0
HoseMose
1 / 1 / 0
Регистрация: 27.08.2013
Сообщений: 101
20.09.2013, 12:56  [ТС] #4
[QUOTE=Ilot;5077244]Да также как и со строкой, только delete прописывать для каждой строки на которые указывает массив указателей.
C++
1
2
for(int j =0; j < size; j++)
    ptrArray[j] = new char[len + 1];
Не понял как он объявляестя ? Прокоментируйет пожалуйста для чайников.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 13:07 #5
Его не надо освобождать, он не динамический. Нельзя применять оператор delete к тому, к чему ты не применял оператор new.
0
HoseMose
1 / 1 / 0
Регистрация: 27.08.2013
Сообщений: 101
20.09.2013, 13:09  [ТС] #6
А мне нужен двумерный массив созданный через new . Что-бы создать его заново и пользоватся чистым массивом. Такое реально ?
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 13:14 #7
В первом посте ты писал про статический массив. Если нужен чистый - просто очисть его.
0
HoseMose
1 / 1 / 0
Регистрация: 27.08.2013
Сообщений: 101
20.09.2013, 13:21  [ТС] #8
И все же динамический За одно и его размером игратся
0
Ilot
Модератор
Эксперт С++
1811 / 1168 / 229
Регистрация: 16.05.2013
Сообщений: 3,082
Записей в блоге: 5
Завершенные тесты: 1
20.09.2013, 13:46 #9
[QUOTE=HoseMose;5077634]
Цитата Сообщение от Ilot Посмотреть сообщение
Да также как и со строкой, только delete прописывать для каждой строки на которые указывает массив указателей.
C++
1
2
for(int j =0; j < size; j++)
    ptrArray[j] = new char[len + 1];
Не понял как он объявляестя ? Прокоментируйет пожалуйста для чайников.
Этот код выделяет место в памяти для размещения массива строк длиной len. ptrArray[j] это указатель на твою строку. Например у тебя есть строка str:
C++
1
char str[] = "бла бла бла";
Тогда присвоение будет выглядеть так:
C++
1
strcpy(ptrArray[j],str);
Или можно попросить ввести пользователя. И т.д.
И все же динамический За одно и его размером игратся
Если только делать массив списком посимвольно.
1
HoseMose
1 / 1 / 0
Регистрация: 27.08.2013
Сообщений: 101
20.09.2013, 14:03  [ТС] #10
C++ (Qt)
1
2
3
4
char *Matrix = new char[10];
 
for(int j=0; j < 10; j++)
    Matrix[j] = new char[10];
При компиляции ошибка : error: invalid conversion from ‘char*’ to ‘char’

Добавлено через 2 минуты
C++ (Qt)
1
2
3
4
char **Matrix = new char*[10];
 
for(int j=0; j < 10; j++)
    Matrix[j] = new char[10];
Переделал заработало. Вопрос : какая разница между **Matrix и *Matrix , зачем две звездочик ? Это типо супер указтель
0
Ilot
Модератор
Эксперт С++
1811 / 1168 / 229
Регистрация: 16.05.2013
Сообщений: 3,082
Записей в блоге: 5
Завершенные тесты: 1
20.09.2013, 14:08 #11
Цитата Сообщение от HoseMose Посмотреть сообщение
C++ (Qt)
1
char *Matrix = new char[10];
При компиляции ошибка : error: invalid conversion from ‘char*’ to ‘char’
C++
1
char*Matrix[];
И будет вам счастие.
p.s. Помните, что вы объявляете массив указателей.

Добавлено через 3 минуты
Переделал заработало. Вопрос : какая разница между **Matrix и *Matrix , зачем две звездочик ? Это типо супер указтель
Это указатель на указатель. Хм... вроде бы должно быть понятно.
1
zer0mail
2334 / 1960 / 192
Регистрация: 03.07.2012
Сообщений: 7,030
Записей в блоге: 1
20.09.2013, 14:09 #12
Что означает сообщение об ошибке?
0
HoseMose
1 / 1 / 0
Регистрация: 27.08.2013
Сообщений: 101
20.09.2013, 14:15  [ТС] #13
Думаю что ошибка свидетельствует , об ошибке. Думаю копилятор глуп

Добавлено через 30 секунд
lLot спасибо огромное.
0
Ilot
Модератор
Эксперт С++
1811 / 1168 / 229
Регистрация: 16.05.2013
Сообщений: 3,082
Записей в блоге: 5
Завершенные тесты: 1
20.09.2013, 14:18 #14
Цитата Сообщение от zer0mail Посмотреть сообщение
Что означает сообщение об ошибке?
Нельзя преобразовать указатель на char в char.
1
zer0mail
2334 / 1960 / 192
Регистрация: 03.07.2012
Сообщений: 7,030
Записей в блоге: 1
20.09.2013, 14:31 #15
Цитата Сообщение от Ilot Посмотреть сообщение
Нельзя преобразовать указатель на char в char.
Я это знаю - мне хотелось, чтобы ТС сам это раскопал.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2013, 14:31
Привет! Вот еще темы с ответами:

Как передать в функцию двумерный массив указателей на класс? - C++
у меня есть std::vector&lt;Monster*&gt; monsters; Rect *pole; int pacmen_distance; Monster и Rect два...

Как правильно создать двумерный массив указателей с использованием calloc? и ввод данных в него - C++
Как правильно создать двумерный массив указателей с использованием calloc и ввести в него данные?

Ввести двумерный массив А (5*2).Определить в нем сумму модулей отрицательных элементов с использованием указателей. - C++
Ввести двумерный массив А (5*2).Определить в нем сумму модулей отр элементов с использованием указателей.

Массив указателей на массив строк и сортировка массива указателей - C++
Добрый день. Поступил вопрос. Есть задача. У нас встроенный массив char mass;.Мы вводим строки до тех пор, пока не будет заполнен массив...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.09.2013, 14:31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru