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

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

Восстановить пароль Регистрация
 
yleart
 Аватар для yleart
60 / 45 / 1
Регистрация: 07.10.2011
Сообщений: 139
05.02.2013, 07:01     Выделение памяти #1
Здравствуйте!
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 в один массив?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2013, 07:01     Выделение памяти
Посмотрите здесь:

C++ выделение памяти
Выделение памяти C++
C++ Выделение памяти
C++ Не выделение памяти
C++ выделение памяти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexcoder
1438 / 652 / 86
Регистрация: 03.06.2009
Сообщений: 3,284
Завершенные тесты: 1
05.02.2013, 09:21     Выделение памяти #2
C++
1
mass=realloc(mass,sizeof(int)*10);
выделит за mass 8 дополнительных элементов типа int
Croessmah
05.02.2013, 10:10
  #3

Не по теме:

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

alexcoder
1438 / 652 / 86
Регистрация: 03.06.2009
Сообщений: 3,284
Завершенные тесты: 1
05.02.2013, 10:12     Выделение памяти #4
дык, если за массивом нет свободного места, он перенесет его в другое место памяти, затем и присваивание указателю делается
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
05.02.2013, 10:28     Выделение памяти #5
alexcoder, ну для того что бы использовать realloc, нужно что бы память была выделена функциями calloc или malloc ( или указатель должен быть равен нулю ), и освобождать нужно функцией free. Все эти функции не вызывают ни конструкторов ни деструкторов. Так что они не совсем подходят для C++.
alexcoder
1438 / 652 / 86
Регистрация: 03.06.2009
Сообщений: 3,284
Завершенные тесты: 1
05.02.2013, 10:32     Выделение памяти #6
Toshkarik, не обязательно. realloc нормально работает и с new и с delete
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 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 просто случайность.
yleart
 Аватар для yleart
60 / 45 / 1
Регистрация: 07.10.2011
Сообщений: 139
05.02.2013, 11:00  [ТС]     Выделение памяти #8
Цитата Сообщение от alexcoder Посмотреть сообщение
C++
1
mass=realloc(mass,sizeof(int)*10);
выделит за mass 8 дополнительных элементов типа int
Стандартными средствами с++ можно сделать как-нибудь?
Somebody
2769 / 1582 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
05.02.2013, 11:03     Выделение памяти #9
Цитата Сообщение от yleart Посмотреть сообщение
Стандартными средствами с++ можно сделать как-нибудь?
new + копировать + delete старое. А так вообще std::vector.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
05.02.2013, 11:04     Выделение памяти #10
Цитата Сообщение от yleart Посмотреть сообщение
Стандартными средствами с++ можно сделать как-нибудь?
Никак, только если писать свой менеджер памяти. Или использовать stl контейнеры.
Dr.Urban
63 / 58 / 7
Регистрация: 14.12.2011
Сообщений: 193
05.02.2013, 11:41     Выделение памяти #11
Оператором new нельзя выделить участок под конкретным адресом?

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

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

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
05.02.2013, 14:54     Выделение памяти #16
Dr.Urban, никак.
Yandex
Объявления
05.02.2013, 14:54     Выделение памяти
Ответ Создать тему
Опции темы

Текущее время: 09:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru