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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
#1

Как объявить двумерный динамический массив - C++

07.08.2011, 14:51. Просмотров 1400. Ответов 14
Метки нет (Все метки)

C++
1
int *matrix = new int [x] [y];
че ругается ?

error C2540: non-constant expression as array bound
а как сделать если без констант надо ?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2011, 14:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как объявить двумерный динамический массив (C++):

Объявить и заполнить двумерный динамический массив случайными числами от 10 до 50 - исправить ошибки в коде - C++
Здравствуйте есть задача 3:http://http://purecodecpp.com/archives/1284 #include<iostream> using namespace std; int ny,my,i,n,rez,qwa;...

Как правильней объявить динамический двухмерный массив - C++
Как правильней объявить динамический двухмерный массив и почему int (*p) = new int; //Или int **p = new int * ; for (int i =...

Как объявить и инициализировать двумерный массив - C++
Доброго времени суток, уважаемые форумчане! Недавно решил постичь ДЗЕН STL-контейнеров C++ и начал с векторов. С одномерными векторами...

Как объявить динамический массив, чтобы он был виден во всех процедурах программы? - C++
Доброго времени суток! Суть проблемы: в Visual Studio создана форма с кнопкой, при нажатии на которую, из файла считываются необходимые...

Кто нибудь подскажет просто как объявить динамический массив M на M (с буквой M, я не ошибся) - C++
:)

Как создать динамический двумерный массив - C++
Можно ли создать на С++ динамический двухмерный масив? Как? int z , x ; cin >> z ; cin >> x ; int *arr = new int(z); int *arr1...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
07.08.2011, 14:53 #2
ибо двумерный массив это
C++
1
2
3
int **matrix=new int*[x];
for(int i=0;i<x;++i)
      matrix[i]=new int[y];
2
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.08.2011, 14:54 #3
C++
1
2
3
int **matrix = new int* [x];
for (int i = 0; i < x; ++i)
  matrix[i] = new int [y];
1
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
07.08.2011, 14:54 #4
http://www.cyberguru.ru/programming/...ay-page76.html
1
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 16:59  [ТС] #5
освобожу ли я всю память если напишу delete [] matrix ?
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
07.08.2011, 17:30 #6
Цитата Сообщение от Noname2512 Посмотреть сообщение
освобожу ли я всю память если напишу delete [] matrix ?
Нет. Память выделялась в два этапа:
1) под массив из x указателей
C++
1
int **matrix = new int* [x];
2) затем под x массивов по y элементов каждый. Адрес каждого такого массива запоминается в массиве указателей matrix
C++
1
2
for (int i = 0; i < x; ++i)
    matrix[i] = new int [y];
Освобождается память так же в два этапа, только в обратном порядке: сначала освобождается память выделенная под каждый из массивов, а затем и память выделенная под массив указателей.
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
07.08.2011, 17:30 #7
Noname2512, нет, удалять надо так же как и создавали циклом.
0
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 17:49  [ТС] #8
C++
1
2
for (i=0;i<dynamic;++i) delete[] matrix[i];
delete[] matrix;
че не работает, прерывается на "delete[] matrix[i]"
когда i == 0
во че выдает :
Unhandled exception at 0x59d231ea in olimp1.exe: 0xC0000005: Access violation reading location 0xcdcdcdc1.
матрица описана так :
int **matrix = new int* [dynamic];
for(i=0;i<dynamic;i++) matrix[i] = new int[a+1]();
0
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
07.08.2011, 18:23 #9
скорей всего во время работы с массивом указатели повредились.
полный код показывай .
0
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 18:27  [ТС] #10
Цитата Сообщение от OstapBender Посмотреть сообщение
полный код показывай .
спасибо, но он уж слишком большой
0
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
07.08.2011, 18:34 #11
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот пример с комментариями, который писал недавно для того чтобы самому разобраться.
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
35
36
37
#include <iostream>
using namespace std;
 
 
//функция печати массива
void print_mij(int** m, int dim1, int dim2)
{
   for (int i = 0; i < dim1; i++) {
       for (int j = 0; j < dim2; j++)
           cout << *(*(m + i) + j) << " ";
       cout << endl;
  }
}
 
int main() {
 
    const int rows = 3; // количество строк
    const int cols = 8; // количество колонок
    int **arr;
 
    arr = new int*[rows]; // создние одномерного массива указателей на одномерные массивы (на строки двумерного массива)
    for (int i = 0; i < rows; i++)
        arr[i] = new int[cols]; //выделение памяти под столбцы в каждой строке
 
    //индексация элементов массива с 0!
    arr[0][1] = 8; //для проверки присвоения значения элементу массива
    arr[1][3] = 2; //для проверки присвоения значения элементу массива
 
    print_mij((int**)arr, rows, cols); //печать массива
 
    for (int i = 0; i < rows; i++)
            delete [] arr[i]; //очистка памяти занятой под столбцы каждой строки
 
    delete [] arr; //удаление массива указателей на одномерные массивы (на строки двумерного массива)
 
    return 0;
}
1
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 19:57  [ТС] #12
прогресс ! теперь прога прерывается на строке :

delete[] matrix;
с ошибкой :
...
Heap corruption detected
...
че типа я украл из кучи и не вернул ?
0
Сыроежка
Заблокирован
07.08.2011, 20:00 #13
Приведите тот код, который вы сейчас используете.
0
Teravisor
31 / 31 / 3
Регистрация: 07.08.2011
Сообщений: 89
07.08.2011, 20:52 #14
Heap corruption detected - ошибка часто возникает при обращении за границы массива, выделенного new или malloc или другими способами выделения из Кучи, или остальных неправильных его(массива) использованиях. Причем обнаруживается только на строке delete, поэтому сложно отлавливается.
1
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 21:16  [ТС] #15
спасибо всем, все работает !
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2011, 21:16
Привет! Вот еще темы с ответами:

Как заполнить двумерный динамический массив? - C++
вот я создал двумерный динамический массив (правильно надеюсь): int row=2; for (int i=0; i&lt;dl; i++){if ('!'==str){row+=1;}}; int...

Как создать динамический двумерный массив - C++
Динамический одномерный массив p можно сождать примерно так: int N, *p; cin &gt;&gt; N; p= new int А как создать динамический...

Как заполнить двумерный динамический массив? - C++
Кто может объяснить , как создать динамический двумерный массив и записать в него элементы из файла, при этом подсчитав количество строк и...

Как создать двумерный динамический массив - C++
Помогите, пожалуйста, в таком вопросе: нужно создать динамический двумерный массив. Да он еще должен быть такой, чтоб длина строк была...


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

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

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