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

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

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

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

01.06.2012, 16:52. Просмотров 629. Ответов 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 - зло" и т.п.
А ответить по существу о причине такого поведения. Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2012, 16:52     Расположение данных в стеке и в куче
Посмотрите здесь:
C++ Не могу понять где объект в куче или в стеке !
C++ Как происходит процесс выделения памяти в стеке и куче
C++ Как выделяется память на стеке и на куче? Когда нужна ручная очистка?
Создать стек из вещественных чисел; найти максимальный элемент в стеке; организовать просмотр данных стека C++
C++ Удаление кучи в куче
Нужно выделить память в куче C++
Потоки и выделение памяти в куче C++
C++ Указатели (Выделение памяти в куче)
Действительно ли new выделяет память в куче (heap)? C++
Передача параметра, выделенного в куче, в функцию C++
В чем преймущество создания обьектов в куче? C++
Пытаюсь разбираться с переполнением буфера в куче C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 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
Большое спасибо!
Ответ Создать тему
Опции темы

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