Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 48

Выделение памяти под новый объект

13.05.2010, 02:05. Показов 1729. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Люди, посоветуйте, пожайлуста, как в уже созданный массив из N объектов добавить ещё один объект?
Преподаватель сказал, что просто надо выделить память под этот объект. Я поняла, что надо снова выделить память на N+1 объект; скопировать существующие N объектов + 1 новый; освободить старую память.................................. ......Только не понимаю, как программно скопировать в выделенную память существующие N объектов?????????

Добавлено через 32 минуты
Ну неужели это так трудно, что ни у кого никаких идей?Как скопировать массив объектов в новую память?- просто так чтоли:
strcpy(память, obj[N]) ???????????????

напишите хоть какие-то мысли., пребольшое пожжжжайлустаааааааааааааа
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.05.2010, 02:05
Ответы с готовыми решениями:

Динамическое выделение памяти под объект
Здравствуйте, меня интересует несколько вопросов по поводу конструкции new. Есть такой код: struct element { std::string...

Динамическое выделение памяти под объект класса
Помогите динамически выделить память под объект класса.

Влияет ли конструктор на выделение памяти под объект?
Прочёл в книге Р.Лафоре "Объектно-ориентированное программирование в С++:" Подобно конструкторам, деструкторы не возвращают значения и...

8
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
13.05.2010, 02:32
У меня в одной книженции написано:
Функция void* realloc (pointer, size)
Изменяет размер предварительно размещённого в памяти блока.. И ТАК ДАЛЕЕ
Изменяет размер

То есть передавай вторым аргументом НОВЫЙ размер, который тебе над. То сть если один элемент массива имеет размер 34 байта, а всего в массиве 5 элементов, тебе надо шестой пихать кудато, вот пиши:
realloc (pointer, 34* 6);

А там уж как Бог даст, есть свободжное место у оси- даст она тебе память, (да ещё и массив скопирует туда) нет- на нет и суда нет. Не всё коту масленица.

С остальным сама разберись. Уж. ПИши давай.
1
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
13.05.2010, 10:20
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <stdlib.h>
 
#define N 3
#define M 1
 
int main()
{
   int * a = (int *)malloc(sizeof(int) * N);
   if(a == NULL)
   {
      puts("error allocate memory");
      return -1;
   }
 
   int i = 0;
   for(i = 0; i < N; ++i)
      a[i] = rand() % 9;
 
   for(i = 0; i < N; ++i)
      printf("%d ", a[i]);
   printf("\n");
 
   realloc(a, sizeof(int) * (N+M));
   for(i = N; i < N + M; ++i)
      a[i] = rand() % 9;
 
   for(i = 0; i < N + M; ++i)
      printf("%d ", a[i]);
   printf("\n");
 
   free(a);
 
   system("pause");
}
1
54 / 50 / 9
Регистрация: 16.05.2008
Сообщений: 162
13.05.2010, 11:44
Litta,твой ход мыслей почти верен. Смотри функцию memcpy.
1
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 48
13.05.2010, 15:34  [ТС]
BornLeader,
fasked,
kravam,

Ребята, большое, вам , конечно, спасибо...Но мы пишем на старом borland-м компиляторе , так что все эти новые функции к нему не применимы.

Попробую есчо обратиться:
я совершенно не понимаю: возможна ли такая запись: strcpy(sss[N+1], obj[N])?????
Можно ли вообще копировать объекты????или , может, надо копировать их поля?????????
Вот со строками всё понятно, там просто написать strcpy(s1, s2)..
.................А вот как быть с объектами?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
13.05.2010, 15:50
Litta, мы тебе и не предлагаем пользоваться новыми функциями, все старое-доброе.
про копирование BornLeader уже говорил, пользоваться надо не strcpy, а memcpy. Например:
C
1
2
3
int a[n];
int b[m];
memcpy(b, a, min(n,m) * sizeof(int));
Копировать надо само собой минимум, потому что может происходить и уменьшение количества элементов. Также неплохо еще перед копированием обнулить область памяти приемника
C
1
memset(b, 0, m * sizeof(int));
для того чтобы после копирования не инициализированные части были забиты нулями, а не мусором, это еще никому не мешало.

А вообще ни к чему эти мучения, если есть realloc - смотри мой пост выше
1
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 48
14.05.2010, 02:30  [ТС]
fasked,
ааааааааааа!!!!!эт не то!!!!!!!!
Ну как же добавить в телеф. справочник новое имя?????????
Что после написать:
telbook * f;
f= new telbook ????????????
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,698
14.05.2010, 02:42
C++
1
2
3
4
telbook * f;
f= new telbook [число_элементов];
///ВСякий код
delete [] f
Но вобще-то эта херь просто резервирует память для стольки-то элементов такого-то типа и возвращает адрес нулевого элемента

Теьбе же надо было к существующему массиву прилепить ещё один элемент, это именно realloc

...А вообще определилась бы, что ли, что именно тебе надо...
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
14.05.2010, 08:23
Цитата Сообщение от Litta Посмотреть сообщение
ааааааааааа!!!!!эт не то!!!!!!!!
Ну как же добавить в телеф. справочник новое имя?????????
Что после написать:
telbook * f;
f= new telbook ????????????
напишите уже, что вам нужно конкретно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.05.2010, 08:23
Помогаю со студенческими работами здесь

Как работает динамическое выделение памяти под объект?
class A { public: A(int x){} ~A(){} }; const int n = 50; A* placementMemory = static_cast&lt;A*&gt;(operator new (n *...

Создание указателя на объект и выделение памяти
Не пойму почему при добавлении одного указателя выдает ошибку Этот код работает class A { public: class B { public: ...

Выделение памяти под структуру
enrollee *p=new enrollee; после работы delete p; выбивает ошибку. неправильно очищаю???

Выделение памяти под указатель
Здравствуйте! Есть следующий код. Я разбиваю строку на слова и слова заданной длины пытаюсь заменить на слово (символьный указатель str)...

Выделение памяти под структуру
Наведите пример выделения памяти под структуру


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru