Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Ze
3 / 3 / 0
Регистрация: 30.10.2010
Сообщений: 12
#1

Расположение данных в стеке и в куче - C++

01.06.2012, 16:52. Просмотров 648. Ответов 2
Метки нет (Все метки)

Друзья, возник вопрос.
Следующий код
C++
1
2
3
char length_buffer[4];
...заполнение length_buffer двоичным представлением целого числа 999...
int length = *reinterpret_cast<int *>(&length_buffer);
работает. переменная length принимает значение 999.
Но если четырехбайтовый массив расместить в куче, тоже самое двоичное значение перестает интерпретироваться как 999:
C++
1
2
3
char *length_buffer = new char[4];
...заполнение length_buffer двоичным представлением целого числа 999...
int length = *reinterpret_cast<int *>(&length_buffer);
не работает.

Первое предположение было - из-за того что адресация в куче идет снизу, а в стеке - сверху. Однако выяснилось, что одно и то же двоичное представление 999 в куче интерпретируется каждый раз как разные значения.

Прошу не сыпать сообщениями вида "для чего это надо, неправильный подход", "reinterpret_cast - зло" и т.п.
А ответить по существу о причине такого поведения. Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2012, 16:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Расположение данных в стеке и в куче (C++):

Создание массивов в стеке и куче - C++
&quot;Напишите небольшую программу,которая создаёт массивы в стеке(массивы фиксированного размера) и массивы в куче(с помощью распределения...

Не могу понять где объект в куче или в стеке ! - C++
Сразу к примеру: class Zombie; { Soldat soldat; // что солдат внутри зомби делает не спрашивайте String name; int ...

Как происходит процесс выделения памяти в стеке и куче - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &quot;disc.h&quot; void main() { SetConsoleCP(1251); ...

Как выделяется память на стеке и на куче? Когда нужна ручная очистка? - C++
Всем здрасьте. //1 char s = 's'; //2 char* ss = new char; Во втором случае компилятор выделяет участок памяти, потом мне же её...

Создать стек из вещественных чисел; найти максимальный элемент в стеке; организовать просмотр данных стека - C++
Создать стек из вещественных чисел. Определить максимальный элемент в стеке. Организовать просмотр данных стека.

Удаление кучи в куче - C++
Доброго. У меня возник такой вопрос: имею я некую структуру struct inbase { int *data; }; в коде (не важно где) я...

2
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.06.2012, 17:36 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
   int arr[10];
   int* p = new int();
   std::cout << arr << '\n'      //arr - адрес 1-го элемента массива
                << &arr << '\n'; //&arr - адрес 1-го элемента массива
   std::cout << p << '\n'        //p - адрес на который указывает указатель
                << &p << '\n';   //&p - адрес самого указателя
   delete p;
}
http://liveworkspace.org/code/9d5a9cf463f8775e22ce7e6e23dd346a
2
Ze
3 / 3 / 0
Регистрация: 30.10.2010
Сообщений: 12
01.06.2012, 17:49  [ТС] #3
Большое спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2012, 17:49
Привет! Вот еще темы с ответами:

Указатели (Выделение памяти в куче) - C++
Чтобы создать в динамически распределяемой памяти переменную типа unsigned short необходимо написать следующее: unsigned short...

Нужно выделить память в куче - C++
Работаю с довольно большим объемом данных, записанных матрицей. Для этого нужно выделить память в куче. правильно ли я это делаю: int...

Потоки и выделение памяти в куче - C++
Подскажите, кто знает, какие есть тонкости при выделении памяти в куче (new) в потоках отличных от главного. У меня возникают исключения...

Спуск по треугольной куче с наименьшей суммой - C++
Добрый день, пытаюсь решить задачу по программированию ( задание ниже), как понимаю для решения необходимо знание динамического...


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

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

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