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

Нужно выделить память в куче - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
19.07.2011, 14:16     Нужно выделить память в куче #1
Работаю с довольно большим объемом данных, записанных матрицей. Для этого нужно выделить память в куче.
правильно ли я это делаю:
C++
1
2
int const range = 3000;
double **matrix = new *double[range];
В конце еще память освободить надо с помощью delete. Вот только все-равно ругается.
Помогите!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
20.07.2011, 11:34     Нужно выделить память в куче #21
Цитата Сообщение от hello19 Посмотреть сообщение
Можете прям написать код, где создается нулевая матрица?
Пожалуйста:
C++
1
2
float **a = new float*[n];  // указатель на матрицу А
    for(j = 0; j<n; j++) a[j]=new float [n]();    // -- это и есть обнуление - скобочки ()
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
20.07.2011, 11:40  [ТС]     Нужно выделить память в куче #22
Вот код построения матрицы
C++
1
2
3
4
5
6
int const range = 5;
    double **matrix = new double*[range];
    for (int i = 0; i < range; i++) 
    {
        matrix[i] = new double[range];
    }
1) Как заполнить матрицу нулями
2) Как работать с с i-ой строчкой, j-столбцом? Мне просто потом надо будет присваивать некоторым элементам матрицы кое-какие значения.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.07.2011, 11:43     Нужно выделить память в куче #23
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
new float [n](); // -- это и есть обнуление - скобочки ()
Работает только для единичных объектов. Для массивов конструктор нельзя непосредственно вызвать.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
20.07.2011, 11:44     Нужно выделить память в куче #24
Цитата Сообщение от Deviaphan Посмотреть сообщение
Только при использовании operator[]
На итераторах скорость тоже не сильно отличается.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.07.2011, 11:47     Нужно выделить память в куче #25
А, нет. Я был не прав. Обнуляет.
Кто мне объяснит, как это работает?

Добавлено через 54 секунды
Цитата Сообщение от fasked Посмотреть сообщение
На итераторах скорость тоже не сильно отличается.
Я имел в виду at(), там проверки дополнительные, которых ни в [], ни в итераторах нет.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
20.07.2011, 12:33     Нужно выделить память в куче #26
Цитата Сообщение от Deviaphan Посмотреть сообщение
Кто мне объяснит, как это работает?
Хм... Дефолтный конструктор?
C++
1
int i = int();
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.07.2011, 12:50     Нужно выделить память в куче #27
Цитата Сообщение от fasked Посмотреть сообщение
Дефолтный конструктор?
Для массива? Принудительный вызов конструктора для встроенных типов?
Я был удивлён, не знал, что так можно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2011, 15:20     Нужно выделить память в куче
Еще ссылки по теме:

Как выделить память? C++
Как выделить память для двумерного массива указателей в куче? C++
C++ Как выделяется память на стеке и на куче? Когда нужна ручная очистка?

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

Или воспользуйтесь поиском по форуму:
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
20.07.2011, 15:20     Нужно выделить память в куче #28
Цитата Сообщение от Deviaphan Посмотреть сообщение
Работает только для единичных объектов. Для массивов конструктор нельзя непосредственно вызвать.
Речь здесь идет о double и float - элементарных типах данных. Для них и работает.
Для массивов реализованных типов я скобочки никогда не писал, ибо там по умолчанию все равно вызывается конструктор без аргументов.

Добавлено через 2 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
Для массива? Принудительный вызов конструктора для встроенных типов?
Я был удивлён, не знал, что так можно.
Читайте правильные книжки...
Yandex
Объявления
20.07.2011, 15:20     Нужно выделить память в куче
Ответ Создать тему
Опции темы

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