Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1

Пример динамического двумерного массива по стандарту C++, располагающегося в монолитном участке памяти

02.09.2015, 19:27. Показов 1743. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста привести пример динамического двумерного массива n на m в понимании стандарта Си++, так чтобы он весь располагался в монолитном участке памяти.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.09.2015, 19:27
Ответы с готовыми решениями:

Удаление двумерного динамического массива из памяти
Допустим дан двумерный динамический массив (созданный с помощью new). Как правильно удалить его из памяти? У меня есть три варианта: ...

Ошибка с удалением памяти от динамического двумерного массива
Вечер в хату, форумчане, помогите пжлст, не могу понять как исправить ошибку. Задание:Разработайте библиотеку функций для работы с...

Вылетает функция очистки памяти двумерного динамического массива
Я написал функции добавления и удаления столбцов и строчек двумерного динамического массива, создал меню, но когда сделаю несколько...

19
 Аватар для Monty_Python
8 / 8 / 6
Регистрация: 31.07.2015
Сообщений: 39
02.09.2015, 19:37
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int main() {
    int m, n;
 
    std::cin >> m >> n;
 
    if ( m > 0 && n > 0 ) {
        int** array = new int*[m];
 
        srand(time(NULL));
 
        for ( int i = 0; i < m; i++ ) {
            array[i] = new int[n];
            for ( int j = 0; j < n; j++ ) {
                array[i][j] = rand() % 100;
                std::cout << array[i][j] << " ";
            }
            std::cout << std::endl;
        }
 
        for( int i = 0; i < m; i++ ) {
            delete[] array[i];
        }
        delete[] array;
 
    } else {
        std::cout << "Wrong size!" << std::endl;
    }
 
    return 0;
}
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
02.09.2015, 19:45  [ТС]
Monty_Python,
C++
1
2
3
4
5
int** array = new int*[m];
...
for ( int i = 0; i < m; i++ ) {
  array[i] = new int[n];
...
???
0
 Аватар для Monty_Python
8 / 8 / 6
Регистрация: 31.07.2015
Сообщений: 39
02.09.2015, 19:50
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
???
динамическое выделение памяти
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.09.2015, 19:55
Monty_Python, и где монолитный участок памяти?
Вот как надо:
C++
1
2
3
int **a = new *int[n];
a[0] = new int[n * m];
for (int i = 1; i < n; ++i) a[i] = a[0] + i * m;
2
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
02.09.2015, 20:32
Любой выделенный кусок памяти можно интерпретировать как двумерный массив.
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
03.09.2015, 18:02  [ТС]
DrOffset, нужен твой совет!

Добавлено через 48 секунд
Croessmah, Давай без философии, а по делу
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
03.09.2015, 18:03
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Давай без философии, а по делу
Давай. Память линейна, всё остальное - вопросы интерпретации.
Что такое двумерный динамический массив в твоем понимании?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.09.2015, 18:05
Ferrari F1, открой глаза на 5-е сообщение.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
03.09.2015, 18:09  [ТС]
castaway, Croessmah, я просмотрел, но хотел увидеть другие варианты реализации динамического двумерного массива. Желательно, чтобы к нему можно было обращаться как к статическому, т.е.
C++
1
  arr[2][5] = 9; // где arr - дин. массив
Почему нельзя просто нормально ответить на вопрос(написать код), а не ехидничать, и не подразумевать, какой же я даун, раз не мог прочесть пятое сообщение.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.09.2015, 18:17
Ferrari F1, к варианту из 5-го сообщения можно обращаться так как ты хочешь.
Какого другого варианта ты ждёшь? Этот самый простой.
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
03.09.2015, 18:29
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Почему нельзя просто нормально ответить на вопрос
Потому что нет нормального вопроса.

Что есть это?
C++
1
int (*p)[6] = new int[5][6] ;
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
чтобы к нему можно было обращаться как к статическим
Не показатель. Например,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
 
 
struct X
{
    int & operator[] ( size_t )
    {
        return e ;
    }
   int e ; 
} ;
 
 
 
int main()
{
    X * x = new X() ;
    x[0][3] = 10 ;
    std::cout << x[0][3] << std::endl ;
}
Является ли x двумерным массивом?

А еще, например, есть
C++
1
std::vector < std::vector < some_type > > some_vector ;
Добавлено через 10 минут
Цитата Сообщение от castaway Посмотреть сообщение
к варианту из 5-го сообщения можно обращаться так как ты хочешь.
только там два разных участка памяти
В монолитном участке это выглядело бы примерно так
| указатели | сами элементы |
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
03.09.2015, 18:30  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что нет нормального вопроса.
Когда человек учится, нет ничего зазорного в том, что он задает вопросы, пускай и глупые.
Гораздо страшнее то, что если б он вобще их не задавал.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.09.2015, 18:34
Цитата Сообщение от Croessmah Посмотреть сообщение
только там два разных участка памяти
Это не важно. Основной массив является линейным и к нему можно обращаться как к двумерному.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
03.09.2015, 18:35
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
нужен твой совет!
Помимо того, что тебе уже привели варианты ответов на твой вопрос, могу посоветовать воспользоваться поиском по форуму: например вот.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.09.2015, 18:38
Croessmah, можешь придумать другой вариант? Мне на ум ничего кроме данного метода не приходит.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
03.09.2015, 18:39
Цитата Сообщение от castaway Посмотреть сообщение
Основной массив является линейным и к нему можно обращаться как к двумерному.
но только через указатели, которые лежат в другом месте

Добавлено через 34 секунды
Цитата Сообщение от castaway Посмотреть сообщение
можешь придумать другой вариант? Мне на ум ничего кроме данного метода не приходит.
если ждет до завтра. Уезжать нужно, любовь-морковь
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.09.2015, 18:41
Цитата Сообщение от Croessmah Посмотреть сообщение
но только через указатели, которые лежат в другом месте
Да какая разница то Главное что это решает поставленную задачу.

Добавлено через 44 секунды
Цитата Сообщение от Croessmah Посмотреть сообщение
если ждет до завтра
Я никуда не тороплюсь. Мне просто интересно, как это можно ещё провернуть. А пока сам подумаю.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
03.09.2015, 18:48
castaway, коротко:
выделяем память с помощью malloc в размере sizeof(type*)*width + sizeof(type)*width*height
"настраиваем" указатели на измерения
"создаем" элементы и помощью placement new
итого имеем type**, по которому нарываемся на структуру |указатели|элементы|
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.09.2015, 18:52
Croessmah, думал об этом. Разница лишь в том где будут храниться эти указатели. Лучше конечно разместить всё в одном участке памяти.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.09.2015, 18:52
Помогаю со студенческими работами здесь

Выделение памяти для динамического двумерного массива внутри функции
Имеется вот такой код : #include &lt;iostream&gt; void allocateMemory(int ***array, int size); void freeMemory(int **array, int size); ...

Передача массива данных в Excel или создание двумерного динамического массива
Нашел на просторах вот такое: Dim oExcel As Object Dim oBook As Object Dim oSheet As Object 'Открыть новую книгу...

Метод-член класса для создания одномерного массива из отрицательных элементов двумерного динамического массива
Помогите, пожалуйста, нужно разработать метод-член класса для создания одномерного массива из отрицательных элементов двумерного...

Задание двумерного динамического массива
a=(int**)malloc(n*sizeof(int*)); for(int i=0;i&lt;n;i++) a=(int*)malloc(m*sizeof(int)); прощу Вас подробно объяснить что...

Заполнение двумерного динамического массива
Объявить и заполнить двумерный динамический массив случайными числами от 10 до 50. Показать его на экран. Для заполнения и показа на экран...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru