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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 14:51     Как объявить двумерный динамический массив #1
C++
1
int *matrix = new int [x] [y];
че ругается ?

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

C++ Кто нибудь подскажет просто как объявить динамический массив M на M (с буквой M, я не ошибся)
C++ Как объявлять двумерный динамический массив
Как заполнить двумерный динамический массив? C++
C++ Как реализовать двумерный динамический массив?
Как объявить динамический массив, чтобы он был виден во всех процедурах программы? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silentnuke
Android Programmer
137 / 138 / 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];
diagon
Higher
 Аватар для diagon
1920 / 1186 / 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];
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
07.08.2011, 14:54     Как объявить двумерный динамический массив #4
http://www.cyberguru.ru/programming/...ay-page76.html
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 16:59  [ТС]     Как объявить двумерный динамический массив #5
освобожу ли я всю память если напишу delete [] matrix ?
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
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];
Освобождается память так же в два этапа, только в обратном порядке: сначала освобождается память выделенная под каждый из массивов, а затем и память выделенная под массив указателей.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
07.08.2011, 17:30     Как объявить двумерный динамический массив #7
Noname2512, нет, удалять надо так же как и создавали циклом.
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]();
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
07.08.2011, 18:23     Как объявить двумерный динамический массив #9
скорей всего во время работы с массивом указатели повредились.
полный код показывай .
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 18:27  [ТС]     Как объявить двумерный динамический массив #10
Цитата Сообщение от OstapBender Посмотреть сообщение
полный код показывай .
спасибо, но он уж слишком большой
Roof
 Аватар для 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;
}
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 19:57  [ТС]     Как объявить двумерный динамический массив #12
прогресс ! теперь прога прерывается на строке :

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

Как правильней объявить динамический двухмерный массив C++
C++ Как объявить и инициализировать двумерный массив
C++ Объявить и заполнить двумерный динамический массив случайными числами от 10 до 50 - исправить ошибки в коде

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

Или воспользуйтесь поиском по форуму:
Noname2512
4 / 4 / 1
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 21:16  [ТС]     Как объявить двумерный динамический массив #15
спасибо всем, все работает !
Yandex
Объявления
07.08.2011, 21:16     Как объявить двумерный динамический массив
Ответ Создать тему
Опции темы

Текущее время: 13:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru