Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
4 / 4 / 0
Регистрация: 25.06.2010
Сообщений: 106
1

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

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

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

error C2540: non-constant expression as array bound
а как сделать если без констант надо ?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.08.2011, 14:51
Ответы с готовыми решениями:

Объявить и заполнить двумерный динамический массив случайными числами от 10 до 50 - исправить ошибки в коде
Здравствуйте есть задача 3:http://http://purecodecpp.com/archives/1284 #include<iostream> using...

Функции для обработки матриц: объявить и заполнить двумерный динамический массив случайными числами в заданном диапазоне
Как переделать этот код так , чтоб он соответствовал этому заданию: /*Объявить и заполнить...

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

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

14
Android Programmer
139 / 140 / 10
Регистрация: 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
Higher
1949 / 1215 / 120
Регистрация: 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
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
07.08.2011, 14:54 4
http://www.cyberguru.ru/progra... age76.html
1
4 / 4 / 0
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 16:59  [ТС] 5
освобожу ли я всю память если напишу delete [] matrix ?
0
2015 / 1614 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
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
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
07.08.2011, 17:30 7
Noname2512, нет, удалять надо так же как и создавали циклом.
0
4 / 4 / 0
Регистрация: 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
593 / 531 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
07.08.2011, 18:23 9
скорей всего во время работы с массивом указатели повредились.
полный код показывай .
0
4 / 4 / 0
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 18:27  [ТС] 10
Цитата Сообщение от OstapBender Посмотреть сообщение
полный код показывай .
спасибо, но он уж слишком большой
0
155 / 155 / 44
Регистрация: 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
4 / 4 / 0
Регистрация: 25.06.2010
Сообщений: 106
07.08.2011, 19:57  [ТС] 12
прогресс ! теперь прога прерывается на строке :

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

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

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

Как заполнить двумерный динамический массив?
вот я создал двумерный динамический массив (правильно надеюсь): int row=2; for (int i=0; i&lt;dl;...

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


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

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

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