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

С++ VLA и прочее... - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проверка на введенное число http://www.cyberforum.ru/cpp-beginners/thread717276.html
Здравствуйте. Как проверить что было введено число а не что то другое. Например я написал подпрограмму, которая проверяет что было введено целое число. long Check(char *message){ bool stop;...
C++ Обработка символьной строки Не могу справиться с этими задачами :( 2)Задать символьную строку, состоящую из слов. Слова разделены группой пробелов. Исходную строку символов ввести с экрана. Выполнить обработку по... http://www.cyberforum.ru/cpp-beginners/thread717248.html
Обработка двумерного массива C++
Не могу справиться с этими задачами :( 1)Создать программу, позволяющую задать двумерный массив, содержащий вещественные числа. Выполнить обработку по варианту. Исходный массив и...
C++ Как написать тест-программу?
Помогите, пожалуйста. Мне необходимо написать тест-программу для класса Adminictrator. //This is the interface for the class SalariedEmployee. #ifndef SALARIEDEMPLOYEE_H #define...
C++ Подсчитывание начения арифметического выражения (Улучшить программу) http://www.cyberforum.ru/cpp-beginners/thread717229.html
Доброго времени суток. Нужно написать программу, подсчитывающую значение арифметического выражения( входят натуральные числа, +, *, круглые скобки). Вот код: //Грамматика: //<Выражение> ::=...
C++ Динамические одномерные масивы Не могу создать новый размер динамического массива. Статический работает как надо (мусор присутствует только в начале), а динамический нет (он такое впечатление вовсе не массив), в чем дело не пойму.... подробнее

Показать сообщение отдельно
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,470
30.11.2012, 21:36
Пришла пора расставить всё на свои места.

Цитата Сообщение от alsav22 Посмотреть сообщение
Неправильно кажется. Память в стеке, под переменные, выделяется до начала работы main(). В этом всё и дело. Как выделить память, если размер её неизвестен?
посмотрел твою цитату; кто такое пишет ему руки надо оторвать, цитату можно понимать двояко (а нужно чтобы она понималась ОДНОЗНАЧНО).

Давай всё-таки разделим мухи отдельно, котлеты отдельно. Есть понятие "выделение стека", а есть понятие "выделение памяти в стеке."На самом деле по твоей цитате речь идёт первом, то есть программе выделяется кусок памяти и говорится: "это стек, запихивай туда свои данные". Иначе и быть не может. Но можно предположить и второй вариант (мою версию выделения памяти)- так уж она скользко написана.

Цитата Сообщение от alsav22 Посмотреть сообщение
Как выделить память, если размер её неизвестен?
Это если предполагать, что память под локальные переменные выделяется до начала main (твои предположения);а если она выделяется в процессе main, то всё становится на свои места.

Поэтому смотрим своими глазами где что и как выделяется, поехали:


Проверяем, вот код:
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
using namespace std;
 
int main()
{
    int m= 0X5555666;
    printf ("%x\n", m);
    getchar ();
    return 0;
}
Так ты говоришь, память под переменную m выделится до начала main? запускаем прогу в отладчике, вот на нулевом рисунке ясно показана программа В НАЧАЛЕ РАБОТЫ, в правом нижнем углу СТЕК и я стрелками показал, что в стеке нет НИЧЕГО ПОХОЖЕГО на 0X5555666

Но, может быть, значения нет, а ячейка памяти выделена? Ни фига подобного, трассируем до момента, когда значение 0x55556666 будет занесено в стек, вот эта инструкция (ris_1.), я на неё показываю стрелкой, кроме того мы видим, что стек с начала работы охренительно увеличился и только ПОСЛЕ ВЫПОЛНЕНИЯ ЭТОЙ ИНСТРУКЦИИ в стек будет положено значение 0X5555666; куда именно я указал пятью восклицательными знаками.

Ну и наконец последняя картинка (ris_2) это мы видим что по адресу в стеке 0X22ff4C РЕАЛЬНО положилось значение 0X5555666 и случилось это непосредственно перед вызовом printf, а далеко не перед началом работы main; ну то есть вышло так: сперва выделена ячейка памяти, через некоторое время (не сразу) туда занесено значение 0X5555666
0
Миниатюры
С++ VLA и прочее...   С++ VLA и прочее...   С++ VLA и прочее...  

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