Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
HoseMose
1 / 1 / 2
Регистрация: 27.08.2013
Сообщений: 116
#1

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

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

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

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

Указатель на двумерный массив указателей
char* err = {{"abc"}, {"def"}}; char ***ptr; ptr = (char ***)err;...

Передать двумерный массив указателей в функцию
Здравствуйте) У меня есть класс Tile и структура Room. Примерно они выглядят...

Задача на двумерный массив с использованием указателей
В двумерном массиве найти строку с наименьшим произведением элементов....

Запись и чтение массива указателей в двумерный массив
Подскажите пожалуйста, вот у меня генерируется двумерный массив в массиве...

16
Ilot
Эксперт С++
1828 / 1186 / 342
Регистрация: 16.05.2013
Сообщений: 3,127
Записей в блоге: 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 / 10
Регистрация: 14.06.2012
Сообщений: 151
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 / 2
Регистрация: 27.08.2013
Сообщений: 116
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
Эксперт С++
4927 / 3034 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 13:07 #5
Его не надо освобождать, он не динамический. Нельзя применять оператор delete к тому, к чему ты не применял оператор new.
0
HoseMose
1 / 1 / 2
Регистрация: 27.08.2013
Сообщений: 116
20.09.2013, 13:09  [ТС] #6
А мне нужен двумерный массив созданный через new . Что-бы создать его заново и пользоватся чистым массивом. Такое реально ?
0
castaway
Эксперт С++
4927 / 3034 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
20.09.2013, 13:14 #7
В первом посте ты писал про статический массив. Если нужен чистый - просто очисть его.
0
HoseMose
1 / 1 / 2
Регистрация: 27.08.2013
Сообщений: 116
20.09.2013, 13:21  [ТС] #8
И все же динамический За одно и его размером игратся
0
Ilot
Эксперт С++
1828 / 1186 / 342
Регистрация: 16.05.2013
Сообщений: 3,127
Записей в блоге: 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 / 2
Регистрация: 27.08.2013
Сообщений: 116
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
Эксперт С++
1828 / 1186 / 342
Регистрация: 16.05.2013
Сообщений: 3,127
Записей в блоге: 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
2451 / 2085 / 216
Регистрация: 03.07.2012
Сообщений: 7,569
Записей в блоге: 1
20.09.2013, 14:09 #12
Что означает сообщение об ошибке?
0
HoseMose
1 / 1 / 2
Регистрация: 27.08.2013
Сообщений: 116
20.09.2013, 14:15  [ТС] #13
Думаю что ошибка свидетельствует , об ошибке. Думаю копилятор глуп

Добавлено через 30 секунд
lLot спасибо огромное.
0
Ilot
Эксперт С++
1828 / 1186 / 342
Регистрация: 16.05.2013
Сообщений: 3,127
Записей в блоге: 5
Завершенные тесты: 1
20.09.2013, 14:18 #14
Цитата Сообщение от zer0mail Посмотреть сообщение
Что означает сообщение об ошибке?
Нельзя преобразовать указатель на char в char.
1
zer0mail
2451 / 2085 / 216
Регистрация: 03.07.2012
Сообщений: 7,569
Записей в блоге: 1
20.09.2013, 14:31 #15
Цитата Сообщение от Ilot Посмотреть сообщение
Нельзя преобразовать указатель на char в char.
Я это знаю - мне хотелось, чтобы ТС сам это раскопал.
1
Ilot
Эксперт С++
1828 / 1186 / 342
Регистрация: 16.05.2013
Сообщений: 3,127
Записей в блоге: 5
Завершенные тесты: 1
20.09.2013, 14:49 #16
Цитата Сообщение от zer0mail Посмотреть сообщение
Я это знаю - мне хотелось, чтобы ТС сам это раскопал.
Так это не ко мне был вопрос?
0
zer0mail
2451 / 2085 / 216
Регистрация: 03.07.2012
Сообщений: 7,569
Записей в блоге: 1
20.09.2013, 15:52 #17
Цитата Сообщение от Ilot Посмотреть сообщение
Так это не ко мне был вопрос?
Нет
0
20.09.2013, 15:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2013, 15:52

Двумерный массив указателей присвоить другому указателю
char *tp = { &quot;bb&quot;, &quot;vv&quot;, &quot;zz&quot;, &quot;kk&quot;, &quot;&quot; }; char ***mp = tp; // вот...

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

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