2 / 2 / 2
Регистрация: 27.08.2013
Сообщений: 150
1

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

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

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

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

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

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

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

16
Эксперт по математике/физикеЭксперт С++
2004 / 1335 / 379
Регистрация: 16.05.2013
Сообщений: 3,454
Записей в блоге: 6
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
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
2 / 2 / 2
Регистрация: 27.08.2013
Сообщений: 150
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
Эксперт С++
4981 / 3088 / 456
Регистрация: 10.11.2010
Сообщений: 11,165
Записей в блоге: 10
20.09.2013, 13:07 5
Его не надо освобождать, он не динамический. Нельзя применять оператор delete к тому, к чему ты не применял оператор new.
0
2 / 2 / 2
Регистрация: 27.08.2013
Сообщений: 150
20.09.2013, 13:09  [ТС] 6
А мне нужен двумерный массив созданный через new . Что-бы создать его заново и пользоватся чистым массивом. Такое реально ?
0
Эксперт С++
4981 / 3088 / 456
Регистрация: 10.11.2010
Сообщений: 11,165
Записей в блоге: 10
20.09.2013, 13:14 7
В первом посте ты писал про статический массив. Если нужен чистый - просто очисть его.
0
2 / 2 / 2
Регистрация: 27.08.2013
Сообщений: 150
20.09.2013, 13:21  [ТС] 8
И все же динамический За одно и его размером игратся
0
Эксперт по математике/физикеЭксперт С++
2004 / 1335 / 379
Регистрация: 16.05.2013
Сообщений: 3,454
Записей в блоге: 6
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
2 / 2 / 2
Регистрация: 27.08.2013
Сообщений: 150
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
Эксперт по математике/физикеЭксперт С++
2004 / 1335 / 379
Регистрация: 16.05.2013
Сообщений: 3,454
Записей в блоге: 6
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
2644 / 2220 / 239
Регистрация: 03.07.2012
Сообщений: 8,064
Записей в блоге: 1
20.09.2013, 14:09 12
Что означает сообщение об ошибке?
0
2 / 2 / 2
Регистрация: 27.08.2013
Сообщений: 150
20.09.2013, 14:15  [ТС] 13
Думаю что ошибка свидетельствует , об ошибке. Думаю копилятор глуп

Добавлено через 30 секунд
lLot спасибо огромное.
0
Эксперт по математике/физикеЭксперт С++
2004 / 1335 / 379
Регистрация: 16.05.2013
Сообщений: 3,454
Записей в блоге: 6
20.09.2013, 14:18 14
Цитата Сообщение от zer0mail Посмотреть сообщение
Что означает сообщение об ошибке?
Нельзя преобразовать указатель на char в char.
1
2644 / 2220 / 239
Регистрация: 03.07.2012
Сообщений: 8,064
Записей в блоге: 1
20.09.2013, 14:31 15
Цитата Сообщение от Ilot Посмотреть сообщение
Нельзя преобразовать указатель на char в char.
Я это знаю - мне хотелось, чтобы ТС сам это раскопал.
1
Эксперт по математике/физикеЭксперт С++
2004 / 1335 / 379
Регистрация: 16.05.2013
Сообщений: 3,454
Записей в блоге: 6
20.09.2013, 14:49 16
Цитата Сообщение от zer0mail Посмотреть сообщение
Я это знаю - мне хотелось, чтобы ТС сам это раскопал.
Так это не ко мне был вопрос?
0
2644 / 2220 / 239
Регистрация: 03.07.2012
Сообщений: 8,064
Записей в блоге: 1
20.09.2013, 15:52 17
Цитата Сообщение от Ilot Посмотреть сообщение
Так это не ко мне был вопрос?
Нет
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.09.2013, 15:52
Помогаю со студенческими работами здесь

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

Двумерный массив указателей присвоить другому указателю
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; int...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru