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

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

Войти
Регистрация
Восстановить пароль
 
Litta
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 48
#1

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

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

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

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

напишите хоть какие-то мысли., пребольшое пожжжжайлустаааааааааааааа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
13.05.2010, 02:32     Выделение памяти под новый объект #2
У меня в одной книженции написано:
Функция void* realloc (pointer, size)
Изменяет размер предварительно размещённого в памяти блока.. И ТАК ДАЛЕЕ
Изменяет размер

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

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

С остальным сама разберись. Уж. ПИши давай.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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");
}
BornLeader
50 / 46 / 1
Регистрация: 16.05.2008
Сообщений: 162
13.05.2010, 11:44     Выделение памяти под новый объект #4
Litta,твой ход мыслей почти верен. Смотри функцию memcpy.
Litta
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)..
.................А вот как быть с объектами?
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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 - смотри мой пост выше
Litta
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 48
14.05.2010, 02:30  [ТС]     Выделение памяти под новый объект #7
fasked,
ааааааааааа!!!!!эт не то!!!!!!!!
Ну как же добавить в телеф. справочник новое имя?????????
Что после написать:
telbook * f;
f= new telbook ????????????
kravam
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
14.05.2010, 02:42     Выделение памяти под новый объект #8
C++
1
2
3
4
telbook * f;
f= new telbook [число_элементов];
///ВСякий код
delete [] f
Но вобще-то эта херь просто резервирует память для стольки-то элементов такого-то типа и возвращает адрес нулевого элемента

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

...А вообще определилась бы, что ли, что именно тебе надо...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2010, 08:23     Выделение памяти под новый объект
Еще ссылки по теме:

Выделение памяти под массив C++
C++ Как работает динамическое выделение памяти под объект?
Выделение памяти под структуру C++
C++ Выделение памяти под матрицу
Влияет ли конструктор на выделение памяти под объект? C++

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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
14.05.2010, 08:23     Выделение памяти под новый объект #9
Цитата Сообщение от Litta Посмотреть сообщение
ааааааааааа!!!!!эт не то!!!!!!!!
Ну как же добавить в телеф. справочник новое имя?????????
Что после написать:
telbook * f;
f= new telbook ????????????
напишите уже, что вам нужно конкретно
Yandex
Объявления
14.05.2010, 08:23     Выделение памяти под новый объект
Ответ Создать тему
Опции темы

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