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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
#1

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

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

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

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

Нужно выделить всю доступную процессу память блоками по 13 байт - C++
Нужно выделить всю доступную процессу память блоками по 13 байт. Использовать нужно две функции : malloc HeapAlloc При этом нужно...

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

Действительно ли new выделяет память в куче (heap)? - C++
Чаще всего пишут что в куче . Ок . Куча процесса это вроде бы блок вполне конкретного размера . Я помню раньше это было 1Мб для intel и 4Мб...

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

Нужно перевести из С++ в C строку с выделением памяти в куче - C++
Есть функция, для определения...что ли длинны записанного в файле. int length() { int len=0; Node tmp; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
20.07.2011, 11:22  [ТС] #16
как заполнить новую кучу нулями? В итоге это должна быть нулевая матрица.
И как работать например с i-ой строчкой, j-столбцом?

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];
    }
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
20.07.2011, 11:27 #17
matrix[строка][столбец] = 0;
ValeryLaptev
Эксперт С++
1040 / 819 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
20.07.2011, 11:30 #18
hello19, дык в моем примере выше написано ж все.
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
20.07.2011, 11:32  [ТС] #19
Можете прям написать код, где создается нулевая матрица?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.07.2011, 11:33 #20
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
1. Скорость - такая же.
Только при использовании operator[], который лучше и не использовать.)
ValeryLaptev
Эксперт С++
1040 / 819 / 48
Регистрация: 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]();    // -- это и есть обнуление - скобочки ()
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++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.07.2011, 11:43 #23
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
new float [n](); // -- это и есть обнуление - скобочки ()
Работает только для единичных объектов. Для массивов конструктор нельзя непосредственно вызвать.
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
20.07.2011, 11:44 #24
Цитата Сообщение от Deviaphan Посмотреть сообщение
Только при использовании operator[]
На итераторах скорость тоже не сильно отличается.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.07.2011, 11:47 #25
А, нет. Я был не прав. Обнуляет.
Кто мне объяснит, как это работает?

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

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

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

Как выделить память с new? - C++
struct stat *buf; Как для структуры выделить память? Много способов перепробовал, но выдает ошибку. Добавлено через 3...

Как выделить память? - C++
Нужно заполнить треугольную матрицу вида 1 1 1 1 1 - 1 - - На элементы с &quot;-&quot; память не должна выделяться. ...

Как выделить память на HEX-е - C++
http://www.cyberforum.ru/attachment.php?attachmentid=578800&amp;stc=1&amp;d=1443205705 ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.07.2011, 15:20
Ответ Создать тему
Опции темы

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