Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
Stas0n
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
1

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

19.07.2011, 14:16. Просмотров 2520. Ответов 27
Метки нет (Все метки)

Работаю с довольно большим объемом данных, записанных матрицей. Для этого нужно выделить память в куче.
правильно ли я это делаю:
C++
1
2
int const range = 3000;
double **matrix = new *double[range];
В конце еще память освободить надо с помощью delete. Вот только все-равно ругается.
Помогите!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2011, 14:16
Ответы с готовыми решениями:

Можно ли так выделить память в куче под указатель на массив?
Здравствуйте Можно ли выделить память в куче под указатель на массив...

Как выделить память для двумерного массива указателей в куче?
Есть массив вида: unsigned char *ddtКак выделить память для такого массива в...

Нужно выделить всю доступную процессу память блоками по 13 байт
Нужно выделить всю доступную процессу память блоками по 13 байт. Использовать...

Работа с вводом. Нужно в зависимости от кол. введенных чисел выделить память
С++ Нужно выделять память в том количестве, сколько было введено чисел до...

Действительно ли new выделяет память в куче (heap)?
Чаще всего пишут что в куче . Ок . Куча процесса это вроде бы блок вполне...

27
ValeryLaptev
Эксперт С++
1050 / 829 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
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]();    // -- это и есть обнуление - скобочки ()
0
Stas0n
3 / 4 / 1
Регистрация: 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-столбцом? Мне просто потом надо будет присваивать некоторым элементам матрицы кое-какие значения.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
20.07.2011, 11:43 23
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
new float [n](); // -- это и есть обнуление - скобочки ()
Работает только для единичных объектов. Для массивов конструктор нельзя непосредственно вызвать.
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
20.07.2011, 11:44 24
Цитата Сообщение от Deviaphan Посмотреть сообщение
Только при использовании operator[]
На итераторах скорость тоже не сильно отличается.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
20.07.2011, 11:47 25
А, нет. Я был не прав. Обнуляет.
Кто мне объяснит, как это работает?

Добавлено через 54 секунды
Цитата Сообщение от fasked Посмотреть сообщение
На итераторах скорость тоже не сильно отличается.
Я имел в виду at(), там проверки дополнительные, которых ни в [], ни в итераторах нет.
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
20.07.2011, 12:33 26
Цитата Сообщение от Deviaphan Посмотреть сообщение
Кто мне объяснит, как это работает?
Хм... Дефолтный конструктор?
C++
1
int i = int();
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
20.07.2011, 12:50 27
Цитата Сообщение от fasked Посмотреть сообщение
Дефолтный конструктор?
Для массива? Принудительный вызов конструктора для встроенных типов?
Я был удивлён, не знал, что так можно.
0
ValeryLaptev
Эксперт С++
1050 / 829 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
20.07.2011, 15:20 28
Цитата Сообщение от Deviaphan Посмотреть сообщение
Работает только для единичных объектов. Для массивов конструктор нельзя непосредственно вызвать.
Речь здесь идет о double и float - элементарных типах данных. Для них и работает.
Для массивов реализованных типов я скобочки никогда не писал, ибо там по умолчанию все равно вызывается конструктор без аргументов.

Добавлено через 2 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
Для массива? Принудительный вызов конструктора для встроенных типов?
Я был удивлён, не знал, что так можно.
Читайте правильные книжки...
0
20.07.2011, 15:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2011, 15:20

Как выделяется память на стеке и на куче? Когда нужна ручная очистка?
Всем здрасьте. //1 char s = 's'; //2 char* ss = new char; Во втором...

Нужно перевести из С++ в C строку с выделением памяти в куче
Есть функция, для определения...что ли длинны записанного в файле. int...

Нужно ли удалять указатель на символьный массив созданный в куче(динамически распределяемой памяти)
Подскажите, программа состоит из 2 функций (main и fun), программа меняет...


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

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

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