Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.97/454: Рейтинг темы: голосов - 454, средняя оценка - 4.97
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105

Выделение динамической памяти для двумерного массива.

16.04.2010, 19:26. Показов 90784. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include <iostream>
 
int main()
{
    setlocale( LC_ALL,"Russian" );
 
    int N, M;
    std::cout << "Введите кол-во строк в массиве: ";
    std::cin >> N;
    std::cout << "Введите кол-во столбцов в массиве: ";
    std::cin >> M;
    int *MAS=new int [N][M];
 
    std::cout << "Первоначальный массив: " << std::endl;
    for (int i=0; i<N; i++) // заполняем массив с клавиатуры.
    for (int j=0; j<M; j++)
    {
        std::cout << "Массив["<<  i <<"]["<< j <<"]: ";
        std::cin >> MAS[i][j];
    }
    
    delete []MAS;
    system("pause");
    return 0;
}
Ошибка 1 error C2540: неконстантное выражение используется в качестве границы массива c:\visual studio 2008\projects\project1\example\example\k od.cpp
Ошибка 1 error C2540: неконстантное выражение используется в качестве границы массива c:\visual studio 2008\projects\project1\example\example\k od.cpp
Ошибка 3 error C2109: для индекса требуется массив или указатель c:\visual studio 2008\projects\project1\example\example\k od.cpp 20
Need help!
2
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.04.2010, 19:26
Ответы с готовыми решениями:

Выделение динамической памяти для массива точек
Доброго времени суток. Вот у нас есть структура точка struct point { double x,y; } p;

Выделение динамической памяти для массива внутри функции
Корректно ли организована работа с памятью в приведенной ниже программе? bool foo(int *array, int n){ array =new int; ...

Правильное выдиление динамической памяти для двумерного массива
#include'iostream.h' #include'stdio.h' #include'string.h' void main() { char **text; int i,j,k,nm; char s; ...

23
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
05.05.2010, 13:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от msangel Посмотреть сообщение
у меня лично в 2008 студии возможно изменять и считывать переменные по адресу уже освобожденной памяти. разве память после удаления не перестает быть доступной?
а если остается доступной, то толку от этой чистки?
Всё правильно. Вы же вызываете оператор new и просите его выделить память для хранения указанного типа, определённого размера. Вы всего лишь получаете указатель на выделенную память.

Цитата Сообщение от msangel Посмотреть сообщение
разве память после удаления не перестает быть доступной?
а если остается доступной, то толку от этой чистки?
В этом и беда. Очистили - память стала быть доступной. Но ведь у нас имеется указатель на этот участок. Поэтому, компилятор и не следит, как он дальше используется. С таким же успехом его мог переписать, например, другой поток программы. А удаление указателя - мера предосторожности, которая в дальнейшем и запретит возможность адресации к освобождённому участку.

А вот то, что нет проверок на то, какая область была выделена - это меня тоже добивает ...
И адресация в matr[-15] - тоже
0
44 / 37 / 6
Регистрация: 30.07.2008
Сообщений: 136
30.09.2011, 13:17
что неправильно?
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
#include <iostream>
using namespace std;
int **mas;
void func(int** mas, int x,int y)
{
int i,j;
mas = new int *[x];
for (i = 0; i < x; i++) {   mas[i] = new int [y];}
for (i = 0; i < x; i++) { for (j = 0; j < y; j++) { std::cin >> mas[i][j];}}
for (i = 0; i < x; i++) {for (j = 0; j < y; j++) {std::cout << mas[i][j];}std::cout << "\n";}
for (int i = 0; i < x; i++) {
  delete []mas[i];
}
delete []mas;
}
int main(int argc, char* argv[]) { 
int x,y,i,j;
//----------------------------------------------------------------------------
std::cout << "Введите кол-во строк в массиве: ";
std::cin >> x;
std::cout << "Введите кол-во столбцов в массиве: ";
std::cin >> y;
func(mas,x,y);
}
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
30.09.2011, 14:51
всё правильно, но массив mas будет заполненым у вас только в функции func
1
KiSey
16.05.2014, 12:12
Вот еще вариант, здесь операция выделения динамической памяти выполняется 2 раза, разобраться как работает предлагаю особо любопытным))
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    int x;
    int y;
    cout << "Введите количество столбцов: ";
    cin >> x;    
    cout << "Введите количество строк: ";
    cin >> y;
    int *temp = new int [x*y];
    int **mas = new int *[y];
    for(int i = 0 ; i < y ; i++)
        mas[i]=&temp[i*x];
    //обращение аналогичное обычному двухмерному массиву:
    mas[3][2] = 10;
    cout << mas[3][2] << endl;
    //и освобождение памяти соответственно....
    delete []temp;
    delete []mas;
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.05.2014, 12:12

Выделение памяти для двумерного массива
Обьясните что означает double** A = new double*, A = new double;,cout.precision(2);, delete A;?????? #include &lt;iostream&gt; ...

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

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

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

Выделение динамической памяти для char
Здравствуйте, возник вопрос: как выделить память для char массива? Вот, что делаю я: #include &quot;stdafx.h&quot; ...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru