Другие языки программирования и технологии

Как выделить память с++

monitor *monitor1[N]; Вот такой массив, каждый элемент которого является указателем на структуру. Как выделить под него память?
стандартное выделение массива указателей я обычно пишу так
int **arr = new int*[size];
delete[] arr;
Сергей Щербаков
Сергей Щербаков
5 543
Лучший ответ
Nurlan Kuanishbekov А если как у меня, то как выделить?
Лучше никак. std::vector и без всяких указателей. В реальной жизни это так делают.
Nurlan Kuanishbekov Ну нам препод сказал так. Векторы мы ещё не проходили.
В Си работать с динамической памятью можно при помощи соответствующих функций распределения памяти (calloc, malloc, free), для чего необходимо подключить библиотеку
malloc.h

С++ использует новые методы работы с динамической памятью при помощи операторов new и delete:

new — для выделения памяти;
delete — для освобождения памяти.

Оператор new используется в следующих формах:

new тип; — для переменных
new тип [размер]; — для массивов

Память может быть распределена для одного объекта или для массива любого типа, в том числе типа, определенного пользователем. Результатом выполнения операции new будет указатель на отведенную память, или нулевой указатель в случае ошибки.

int *ptr_i;
double *ptr_d;
struct person *human;

ptr_i = new int;
ptr_d = new double[10];
human = new struct person;

Память, отведенная в результате выполнения new, будет считаться распределенной до тех пор, пока не будет выполнена операция delete.

Освобождение памяти связано с тем, как выделялась память – для одного элемента или для нескольких. В соответствии с этим существует и две формы применения delete:

delete указатель; — для одного элемента
delete[] указатель; — для массивов

Например, для приведенного выше случая, освободить память необходимо следующим образом:

delete ptr_i;
delete[] ptr_d;
delete human;

Освобождаться с помощью delete может только память, выделенная оператором new.
Пример Создание динамического массива
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include
using namespace std;
int main()
{
int size;
int *dan;
system("chcp 1251");
system("cls");
cout << "Ввести размерность массива : ";
cin >> size;
dan = new int[size];
for (int i = 0; i<size; i++) {
cout << "dan[" << i << "] = ";
cin >> dan[i];
}
for (int i = 0; i<size; i++)
cout << dan[i] << " ";
delete[] dan;
cin.get(); cin.get();
return 0;
}

Результат выполнения
Операторы new и delete

Указатель dan – базовый адрес динамически распределяемого массива, число элементов которого равно size. Операцией delete освобождается память, распределенная при помощи new.
Nurlan Kuanishbekov Спасибо, но это не то
открой командную строку от имени Администратора затем пропиши комманду rd и там путь к c++ потом откроеца окно с помощью по выделению памяти