• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Динамическая память

  • Автор темы Vyacheslavovich
  • Дата начала
V

Vyacheslavovich

Помогите разобраться с указателями, ссылочными типами... динамической памятью на С++.. сколько не читал - толком не могу понять, как это работает. Как, например, создать динамический массив, размер которого заранее неизвестен.. используя при этом указатели? Только понятными словами чтобы...
 
G

grigsoft

Так а что непонятно-то? Память выделяется определенного размера под то, что ты хочешь там разместить. Чтобы сделать динамический массив, ты выделяешь столько памяти сколько нужно сначала, потом при необходимости выделяешь новый, больший, кусок заново, копируя старые данные туда, либо делаешь realloc, пытаясь расширить доступную область.
 
M

Mice

Эм... а можно я еще вопросика подкину? Т.е., как я поняла, глядя на многочисленные книжные примеры, как - никак, а размерность по крайней мере массива указателей придется задавать, и уже потом выделять память для объектов, но максимальное их число все равно будет 100? Ну, типа такого?

Код:
MyClass* ptr[100];
int n = 8;
for (int i = 0; i < n; i++)
ptr[i] = new MyClass;

Ну, и вариации... но если я в итоге использую все сто указателей из массива, а все равно мало будет? Можно ли как - то сделать что - то совсем уж безразмерное, или придется просто выделять заново больший кусок памяти и копировать все туда, а эту очищать? Это, наверное, затратно по времени, да и памяти ведь нужно иметь в два раза больше на случай такого копирования... (realloc вроде в c++ уже нету. Разве что от сишки. В любом случае, с операцией new он ведь не будет работать) Простите, если совсем ламерский вопрос задаю, ^_^ просто к слову пришлось - всегда у знакомых спрашивала, но никто ответить не мог, а тут как раз тема появилась..
 
M

Mice

@rtem
int* arr = new int[n]; ?

Ну ведь все равно размерность задается?


P.S: можно не отвечать ^_^ только что подумала про std::vector.

Туплю ;)
 
G

grigsoft

Mice
Какая разница - вектор будет делать тоже самое - выделять новый фрагмент, копировать из старого. Долго? зависит от подхода - если у вас 100тыс. объектов, а вы будете их добавлять по 50, то да, будет долго. Безразмерного все равно не будет.
 
M

Mice

grigsoft Да. Спасибо за ответ, теперь смогу спать спокойно, не думать о безразмерных массивах :please:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!