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

Двухмерный динамический массив - C++

Восстановить пароль Регистрация
 
АлексИванов
0 / 0 / 1
Регистрация: 08.11.2012
Сообщений: 72
08.11.2012, 18:14     Двухмерный динамический массив #1
Ребята, подскажите пожалуйста, необходимо создать двухмерный динамический массив.
Его размерность должна быть 10000000 на 10000000. Пробовал разобраться сам с этим, но как только ввожу данные больше 1000000 на 100, то среда Borland developer studio 2005, выдает ошибку "access violation in address 00402D67 in module Project.exe read of address 00000190"
Пробовал создавать массив статический 10000000 на 1000000 и ошибки так же вылазиют, другого рода правда, типа какой то стек переполнен.
Подскажите как мне всё таки использовать динамический массив, и создавать его максимально большим.
И подскажите на сколько он может быть большим.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
08.11.2012, 18:25     Двухмерный динамический массив #2
Цитата Сообщение от АлексИванов Посмотреть сообщение
И подскажите на сколько он может быть большим.
Размер ограничевается, только памятью вашего ПК.
АлексИванов
0 / 0 / 1
Регистрация: 08.11.2012
Сообщений: 72
08.11.2012, 18:33  [ТС]     Двухмерный динамический массив #3
И как это узнать?!
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.11.2012, 18:38     Двухмерный динамический массив #4
Цитата Сообщение от АлексИванов Посмотреть сообщение
типа какой то стек переполнен.
Локальные переменные выделяются в стеке. Естественно он переполнится.
Динамические массивы выделяются в куче.
Выделение двумерного динамического массива int
C++
1
2
3
4
5
6
7
8
9
int** allocate(int w, int h){
  int** mas;
  int i;
  mas= new int*[w];
  mas[0]= new int[w*h];
  for(i=1; i<w; i++)
    mas[i]=mas[i-1]+h;
  return mas;
}
АлексИванов
0 / 0 / 1
Регистрация: 08.11.2012
Сообщений: 72
08.11.2012, 18:38  [ТС]     Двухмерный динамический массив #5
И как это узнать?!
И что подразумевается под памятью?!Более подробно растолкуйте пожалуйста.
То есть от среды программирования это не зависит?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.11.2012, 18:43     Двухмерный динамический массив #6
Цитата Сообщение от АлексИванов Посмотреть сообщение
То есть от среды программирования это не зависит?
Я не уверен в ответе на этот вопрос. Возможно, что зависит. Я смутно помню, что в настройках некоторых сред программирования можно определить размер стека. Но зачем это делать?
АлексИванов
0 / 0 / 1
Регистрация: 08.11.2012
Сообщений: 72
08.11.2012, 18:51  [ТС]     Двухмерный динамический массив #7
поясните пожалуйста что такое allocate.
И как я могу это использовать,если мне нужно будет использовать 4 динамических массива 2 одинаковой размерности, а другие 2 разного, причем в них хранятся вещественные числа.

Добавлено через 6 минут
я вот так создавал :
C++
1
2
3
4
 double **yy1;
        yy1 = new double*[N]; 
    for(int k= 0; k < N; k++)
        yy1[k] = new double [M];
Это правильно?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.11.2012, 18:55     Двухмерный динамический массив #8
allocate возвращает указатель на двумерный массив чисел int размера w на h
использовать так
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;
int** allocate(int w, int h){
  int** mas;
  int i;
  mas= new int*[w];
  mas[0]= new int[w*h];
  for(i=1; i<w; i++)
    mas[i]=mas[i-1]+h;
  return mas;
}
void destroy(int** array){
  delete[] array[0];
  delete[] array;
}
int main(){
  int m, n;
  int i, j;
  int** array;
  cout<<"Input 2 numbers (columns, rows):";
  cin>>m>>n;
  array=allocate(m, n);
  for (i=0; i<m; i++)
    for (j=0; j<n; j++)
    {
      cout<<"Input A("<<i<<", "<<j<<"):";
      cin>>array[i][j];
    }
  for (i=0; i<m; i++){
    for (j=0; j<n; j++)
    {
      cout<<array[i][j]<<", ";
    }
    cout<<endl;
  }
  return 0;
}
Добавлено через 32 секунды
Цитата Сообщение от АлексИванов Посмотреть сообщение
я вот так создавал :
double **yy1;
yy1 = new double*[N];
for(int k= 0; k < N; k++)
yy1[k] = new double [M];
Это правильно?
Абсолютно
АлексИванов
0 / 0 / 1
Регистрация: 08.11.2012
Сообщений: 72
08.11.2012, 19:05  [ТС]     Двухмерный динамический массив #9
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
cout<<"Input A("<<i<<", "<<j<<"):";
cin>>array[i][j];
}
for (i=0; i<m; i++){
for (j=0; j<n; j++)
{
cout<<array[i][j]<<", ";
}
cout<<endl;
}
return 0;
Для чего эти блоки циклов?!
Если я поменяю int на double то я так смогу его заполнить вещественными числами,

void destroy(int** array){
delete[] array[0];
delete[] array;
Это нужно для уничтожения массивов?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.11.2012, 19:08     Двухмерный динамический массив #10
Цитата Сообщение от АлексИванов Посмотреть сообщение
Это нужно для уничтожения массивов?
Да, только я забыл его использовать в конце
C++
1
2
3
4
...
destroy(array);
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2012, 19:10     Двухмерный динамический массив
Еще ссылки по теме:

Двухмерный динамический массив C++
Динамический двухмерный массив C++
двухмерный динамический массив C++

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

Или воспользуйтесь поиском по форуму:
АлексИванов
0 / 0 / 1
Регистрация: 08.11.2012
Сообщений: 72
08.11.2012, 19:10  [ТС]     Двухмерный динамический массив #11
А предыдущие 4 цикла for для чего?!

Добавлено через 1 минуту
А предыдущие 4 цикла for для чего?
Yandex
Объявления
08.11.2012, 19:10     Двухмерный динамический массив
Ответ Создать тему
Опции темы

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