Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
yleart
60 / 45 / 12
Регистрация: 07.10.2011
Сообщений: 139
#1

Выделение памяти - C++

05.02.2013, 07:01. Просмотров 557. Ответов 15
Метки нет (Все метки)

Здравствуйте!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
int main() {
    int *mass = new int [2];
    int *mass2 = new int [2];
    std::cout << (unsigned int)mass << std::endl;
    std::cout << (unsigned int)mass2 << std::endl;
    int *mass3 = mass;
    delete mass;
    delete mass2;
    std::cout << (unsigned int)mass << std::endl;
    std::cout << (unsigned int)mass2 << std::endl;
    std::cout << (unsigned int)mass3 << std::endl;
    for (int i = 0; i < 4; ++i)
        std::cout << mass3[i] << " ";
    std::cout << std::endl;
    system("pause");
    return 0;
}
Собственно вопрос: можно ли выделить память, сразу за mass и объединить ее с mass в один массив?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2013, 07:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выделение памяти (C++):

Выделение памяти, проверка на утечку памяти
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление...

Распределение памяти. Динамическое выделение памяти
an-1 an-2 ... a2

Выделение памяти
Сразу кидаю код. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;memory&gt;...

Выделение памяти
Часто возникает такая проблема, когда конфигурирую проект как Release...

Выделение памяти
Какой суммарный объем памяти в байтах будут занимать поля CObj всех объектов...

Выделение памяти
В чём ошибка выделения памяти? Подскажите, друзья! #include &quot;stdafx.h&quot;...

15
alexcoder
1557 / 702 / 145
Регистрация: 03.06.2009
Сообщений: 4,029
Завершенные тесты: 1
05.02.2013, 09:21 #2
C++
1
mass=realloc(mass,sizeof(int)*10);
выделит за mass 8 дополнительных элементов типа int
1
Croessmah
05.02.2013, 10:10
  #3

Не по теме:

Цитата Сообщение от alexcoder Посмотреть сообщение
выделит за mass 8 дополнительных элементов типа int
если сможет, так что не факт:) и выделяется "сырая память"

0
alexcoder
1557 / 702 / 145
Регистрация: 03.06.2009
Сообщений: 4,029
Завершенные тесты: 1
05.02.2013, 10:12 #4
дык, если за массивом нет свободного места, он перенесет его в другое место памяти, затем и присваивание указателю делается
0
Toshkarik
1148 / 865 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
05.02.2013, 10:28 #5
alexcoder, ну для того что бы использовать realloc, нужно что бы память была выделена функциями calloc или malloc ( или указатель должен быть равен нулю ), и освобождать нужно функцией free. Все эти функции не вызывают ни конструкторов ни деструкторов. Так что они не совсем подходят для C++.
0
alexcoder
1557 / 702 / 145
Регистрация: 03.06.2009
Сообщений: 4,029
Завершенные тесты: 1
05.02.2013, 10:32 #6
Toshkarik, не обязательно. realloc нормально работает и с new и с delete
0
Toshkarik
1148 / 865 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
05.02.2013, 10:36 #7
alexcoder, нет, эта функция должна использоваться только с malloc или calloc ( и free соответственно ).
http://www.cplusplus.com/reference/cstdlib/realloc/
Pointer to a memory block previously allocated with malloc, calloc or realloc, or a null pointer (to allocate a new block).
То что она у Вас работает с new просто случайность.
0
yleart
60 / 45 / 12
Регистрация: 07.10.2011
Сообщений: 139
05.02.2013, 11:00  [ТС] #8
Цитата Сообщение от alexcoder Посмотреть сообщение
C++
1
mass=realloc(mass,sizeof(int)*10);
выделит за mass 8 дополнительных элементов типа int
Стандартными средствами с++ можно сделать как-нибудь?
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
05.02.2013, 11:03 #9
Цитата Сообщение от yleart Посмотреть сообщение
Стандартными средствами с++ можно сделать как-нибудь?
new + копировать + delete старое. А так вообще std::vector.
1
Toshkarik
1148 / 865 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
05.02.2013, 11:04 #10
Цитата Сообщение от yleart Посмотреть сообщение
Стандартными средствами с++ можно сделать как-нибудь?
Никак, только если писать свой менеджер памяти. Или использовать stl контейнеры.
1
Dr.Urban
63 / 58 / 14
Регистрация: 14.12.2011
Сообщений: 193
05.02.2013, 11:41 #11
Оператором new нельзя выделить участок под конкретным адресом?

new(0x0040) int[2]; ????
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
05.02.2013, 11:47 #12
Dr.Urban, можно, но только если вы уверены, что память под этим адресом принадлежит вашей программе, т.е. каким-либо образом (автоматически или динамически) была выделена ранее.
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
05.02.2013, 11:52 #13
Цитата Сообщение от silent_1991 Посмотреть сообщение
можно, но только если вы уверены, что память под этим адресом принадлежит вашей программе, т.е. каким-либо образом (автоматически или динамически) была выделена ранее.
Хм... Это про placement new? Я бы это не назвал "выделением памяти".
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
05.02.2013, 11:59 #14
Somebody, да, это скорее явный вызов конструктора в уже существующей области памяти. Плюс память, можно сказать, "типизируется".
0
Dr.Urban
63 / 58 / 14
Регистрация: 14.12.2011
Сообщений: 193
05.02.2013, 14:49 #15
Цитата Сообщение от Somebody Посмотреть сообщение
Хм... Это про placement new?
Согласен, но как тогда реализовать выделение памяти именно по этому адресу? Вот хочется мне и все ))
0
silent_1991
Эксперт С++
5007 / 3067 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
05.02.2013, 14:54 #16
Dr.Urban, никак.
1
05.02.2013, 14:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2013, 14:54
Привет! Вот еще темы с решениями:

Выделение памяти
int main() { FILE *fIn = NULL, *fOut =NULL; Error EMyError; CNodeStack...

Выделение памяти
Вот кусок кода, класс и функция добавления в список Класс занимает 64 бита, я...

Выделение памяти
Какая разница между выделением памяти функциями malloc, calloc, realloc и...

Выделение памяти
Скажите пожалуйста что не так? Не могу получить доступ к элементу str = 12,...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

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