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

Почему не работает 2-мерный массив с выделением памяти? - C++

Восстановить пароль Регистрация
 
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.04.2013, 20:15     Почему не работает 2-мерный массив с выделением памяти? #1
Почему не работает 2-мерный массив с выделением памяти?
C++
#include <iostream>
using namespace std;
 
int main()
{
    // РАБОТАЕТ
    int *s = (int*)new int[2];
 
    s[0] = 1;
    s[1] = 2;
 
    cout    << s[0] << '\n' 
            << s[1] << '\n';
 
    
    // НЕ РАБОТАЕТ
    int **t = (int**)new int[2][2];
 
    t[0][0] = 1;
    t[0][1] = 2;
 
    cout    << t[0][0] << '\n' 
            << t[0][1] << '\n';
 
 
    delete t;
    delete s;
}
Добавлено через 1 минуту
Компилируется, но вылетает с ошибкой сегментирования
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 20:15     Почему не работает 2-мерный массив с выделением памяти?
Посмотрите здесь:

C++ ошибка с выделением памяти
C++ Строки с выделением динамической памяти
C++ Конструктор с выделением памяти
C++ Двумерный массив с динамическим выделением памяти
Проблема с выделением памяти C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VEINHORN
542 / 91 / 22
Регистрация: 16.12.2011
Сообщений: 317
09.04.2013, 20:18     Почему не работает 2-мерный массив с выделением памяти? #2
programina, Выделение динамической памяти для двумерного массива.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int x,y;
//----------------------------------------------------------------------------
std::cout << "Введите кол-во строк в массиве: ";
std::cin >> x;
std::cout << "Введите кол-во столбцов в массиве: ";
std::cin >> y;
//------------------------Выделение памяти------------------------------------
int **mas = new int *[x];
 
for (int i = 0; i < x; i++) {
  mas[i] = new int [y];
}
//----------------------------------------------------------------------------
//                      Выполняйте действия, которые вам необходимы
//--------------------------Освобождение памяти----------------------------
for (int i = 0; i < x; i++) {
  delete []mas[i];
}
delete []mas;
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.04.2013, 20:34  [ТС]     Почему не работает 2-мерный массив с выделением памяти? #3
MCKLAS, а не знаете что означает это:
C++
int **t = (int**)new int[2][2];
в одном учебнике написано, что это выделение памяти под двумерный массив
VEINHORN
542 / 91 / 22
Регистрация: 16.12.2011
Сообщений: 317
09.04.2013, 21:04     Почему не работает 2-мерный массив с выделением памяти? #4
Цитата Сообщение от programina Посмотреть сообщение
MCKLAS, а не знаете что означает это:
C++
int **t = (int**)new int[2][2];
в одном учебнике написано, что это выделение памяти под двумерный массив
Сначала объявляется указатель второго порядка **t,который ссылается на двумерный массив int[2][2].
Вам нужно сначала выделить память под массив указателей:
C++
1
float **ptrarray = new float* [2];
А потом для каждой строки массива выделить к примеру 5 элементов:
C++
1
2
for (int count = 0; count < 2; count++)
        ptrarray[count] = new float [5]; // и пять столбцов
Удаление:
C++
1
2
3
4
// высвобождение памяти отводимой под двумерный динамический массив:
    for (int count = 0; count < 2; count++) 
        delete [] ptrarray[count];
//      где 2 – количество строк в массиве
Добавлено через 7 минут
Можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main()
{
    int **t = (int**)new int[2][2];
    
    for (int count = 0; count < 2; count++)
        t[count] = new int [5]; // и пять столбцов
    t[0][0] = 1;
    t[0][1] = 2;
    t[1][0] = 3;
    t[1][1] = 4;
    //не работает
    //t[2][0] = 1;
    //t[2][1] = 1;
    cout << t[0][0] << " " << t[0][1] << endl;
    cout << t[1][0] << " " << t[1][1] << endl;
    system("pause");
}
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.04.2013, 21:27  [ТС]     Почему не работает 2-мерный массив с выделением памяти? #5
Цитата Сообщение от MCKLAS Посмотреть сообщение
C++
1
2
3
4
    int **t = (int**)new int[2][2]; // А ЗДЕСЬ ДОЛЖНО БЫТЬ [2][2] ИЛИ [2][5] ?
    
    for (int count = 0; count < 2; count++)
        t[count] = new int [5]; // и пять столбцов
?

Добавлено через 2 минуты
у меня объявляется [2][2] но заполняю массив [2][5] и все работает
VEINHORN
542 / 91 / 22
Регистрация: 16.12.2011
Сообщений: 317
09.04.2013, 21:29     Почему не работает 2-мерный массив с выделением памяти? #6
Цитата Сообщение от programina Посмотреть сообщение
?
там должно быть int **t = (int**)new int*[2];//число строк

Не знаю почему вам хочется выделить именно так по корявому:
C++
1
int **t = (int**)new int[2][2];
В том коде выделяется память под массив [2][5]
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
09.04.2013, 21:32  [ТС]     Почему не работает 2-мерный массив с выделением памяти? #7
MCKLAS, хорошо, буду делать правильно, спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 21:40     Почему не работает 2-мерный массив с выделением памяти?
Еще ссылки по теме:

Проблемы с выделением памяти C++
C++ Работа со строками и выделением памяти
C++ Задача на строки с выделением памяти

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 21:40     Почему не работает 2-мерный массив с выделением памяти? #8
И new не нужно явно приводить к типу указателя, это не С.
Yandex
Объявления
09.04.2013, 21:40     Почему не работает 2-мерный массив с выделением памяти?
Ответ Создать тему
Опции темы

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