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

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

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

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

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

напишите хоть какие-то мысли., пребольшое пожжжжайлустаааааааааааааа
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2010, 02:05
Ответы с готовыми решениями:

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

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

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

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

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

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

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

С остальным сама разберись. Уж. ПИши давай.
1
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
13.05.2010, 10:20 3
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 4
Litta,твой ход мыслей почти верен. Смотри функцию memcpy.
1
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 48
13.05.2010, 15:34  [ТС] 5
BornLeader,
fasked,
kravam,

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

Попробую есчо обратиться:
я совершенно не понимаю: возможна ли такая запись: strcpy(sss[N+1], obj[N])?????
Можно ли вообще копировать объекты????или , может, надо копировать их поля?????????
Вот со строками всё понятно, там просто написать strcpy(s1, s2)..
.................А вот как быть с объектами?
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
13.05.2010, 15:50 6
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  [ТС] 7
fasked,
ааааааааааа!!!!!эт не то!!!!!!!!
Ну как же добавить в телеф. справочник новое имя?????????
Что после написать:
telbook * f;
f= new telbook ????????????
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
14.05.2010, 02:42 8
C++
1
2
3
4
telbook * f;
f= new telbook [число_элементов];
///ВСякий код
delete [] f
Но вобще-то эта херь просто резервирует память для стольки-то элементов такого-то типа и возвращает адрес нулевого элемента

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

...А вообще определилась бы, что ли, что именно тебе надо...
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
14.05.2010, 08:23 9
Цитата Сообщение от Litta Посмотреть сообщение
ааааааааааа!!!!!эт не то!!!!!!!!
Ну как же добавить в телеф. справочник новое имя?????????
Что после написать:
telbook * f;
f= new telbook ????????????
напишите уже, что вам нужно конкретно
0
14.05.2010, 08:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2010, 08:23
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru