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

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

Восстановить пароль Регистрация
 
Ze
3 / 3 / 0
Регистрация: 30.10.2010
Сообщений: 12
01.06.2012, 16:52     Расположение данных в стеке и в куче #1
Друзья, возник вопрос.
Следующий код
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 - зло" и т.п.
А ответить по существу о причине такого поведения. Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2012, 16:52     Расположение данных в стеке и в куче
Посмотрите здесь:

Нужно выделить память в куче C++
Потоки и выделение памяти в куче C++
C++ Указатели (Выделение памяти в куче)
Как создать объект в новой куче? C++
Передача параметра, выделенного в куче, в функцию C++
C++ Как происходит процесс выделения памяти в стеке и куче
C++ Не могу понять где объект в куче или в стеке !
C++ Спуск по треугольной куче с наименьшей суммой
Динамическое выделение памяти. Ошибки в куче C++
C++ Как выделяется память на стеке и на куче? Когда нужна ручная очистка?
C++ Удаление кучи в куче
Действительно ли new выделяет память в куче (heap)? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6545 / 3965 / 226
Регистрация: 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/9d5a9c...ce7e6e23dd346a
Ze
3 / 3 / 0
Регистрация: 30.10.2010
Сообщений: 12
01.06.2012, 17:49  [ТС]     Расположение данных в стеке и в куче #3
Большое спасибо!
Yandex
Объявления
01.06.2012, 17:49     Расположение данных в стеке и в куче
Ответ Создать тему
Опции темы

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