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

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

Войти
Регистрация
Восстановить пароль
 
 
yleart
60 / 45 / 1
Регистрация: 07.10.2011
Сообщений: 139
#1

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

05.02.2013, 07:01. Просмотров 509. Ответов 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 в один массив?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2013, 07:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение памяти (C++):

Выделение памяти, проверка на утечку памяти - C++
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление и запись ячейки памяти? Может быть, есть более простые...

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

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

Выделение памяти - C++
Какой суммарный объем памяти в байтах будут занимать поля CObj всех объектов класса CEx в этой программе: class CEx {public: static...

Выделение памяти - C++
Часто возникает такая проблема, когда конфигурирую проект как Release происходит ошибка выделения памяти (при вызывании new), например...

выделение памяти - C++
Здравствуйте, помогите пожалуйста исправить ошибку, это лишь малая часть кода. В задании: поле name должно быть динамическим: char...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alexcoder
1463 / 677 / 89
Регистрация: 03.06.2009
Сообщений: 3,561
Завершенные тесты: 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
1463 / 677 / 89
Регистрация: 03.06.2009
Сообщений: 3,561
Завершенные тесты: 1
05.02.2013, 10:12 #4
дык, если за массивом нет свободного места, он перенесет его в другое место памяти, затем и присваивание указателю делается
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
05.02.2013, 10:28 #5
alexcoder, ну для того что бы использовать realloc, нужно что бы память была выделена функциями calloc или malloc ( или указатель должен быть равен нулю ), и освобождать нужно функцией free. Все эти функции не вызывают ни конструкторов ни деструкторов. Так что они не совсем подходят для C++.
alexcoder
1463 / 677 / 89
Регистрация: 03.06.2009
Сообщений: 3,561
Завершенные тесты: 1
05.02.2013, 10:32 #6
Toshkarik, не обязательно. realloc нормально работает и с new и с delete
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
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
2788 / 1602 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
05.02.2013, 11:03 #9
Цитата Сообщение от yleart Посмотреть сообщение
Стандартными средствами с++ можно сделать как-нибудь?
new + копировать + delete старое. А так вообще std::vector.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
05.02.2013, 11:47 #12
Dr.Urban, можно, но только если вы уверены, что память под этим адресом принадлежит вашей программе, т.е. каким-либо образом (автоматически или динамически) была выделена ранее.
Somebody
2788 / 1602 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
05.02.2013, 11:52 #13
Цитата Сообщение от silent_1991 Посмотреть сообщение
можно, но только если вы уверены, что память под этим адресом принадлежит вашей программе, т.е. каким-либо образом (автоматически или динамически) была выделена ранее.
Хм... Это про placement new? Я бы это не назвал "выделением памяти".
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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:49
Привет! Вот еще темы с ответами:

Выделение памяти - C++
Добрый вечер. Немогу никак понять некоторые тонкости выделения памяти. Во первых: на что указывает указатель, при записи char*...

Выделение памяти - C++
Можно ли сделать так, чтобы в memory выделилась память для 5 int объектов, а затем раздать ее разным переменным? Пытался таким образом и...

выделение памяти - C++
#include &lt;iostream&gt; using namespace std; class Matrix { int m, n; public: float **M; Matrix(int a, int b); void...

До выделение памяти в С++ - C++
Всем приветик. Вообщем есть некоторые сложности с довыделение памяти... Что я хочу сделать: есть 2-х мерный массив (он ещё и квадратный)....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.02.2013, 14:49
Ответ Создать тему
Опции темы

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