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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проверка на введенное число http://www.cyberforum.ru/cpp-beginners/thread717276.html
Здравствуйте. Как проверить что было введено число а не что то другое. Например я написал подпрограмму, которая проверяет что было введено целое число. long Check(char *message){ bool stop; char str; int x; do{ system("cls"); stop = false; cout << message;
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 SALARIEDEMPLOYEE_H #include <string> #include "employee.h"
C++ Подсчитывание начения арифметического выражения (Улучшить программу) http://www.cyberforum.ru/cpp-beginners/thread717229.html
Доброго времени суток. Нужно написать программу, подсчитывающую значение арифметического выражения( входят натуральные числа, +, *, круглые скобки). Вот код: //Грамматика: //<Выражение> ::= <слагаемое> {+ <слагаемое>} //<Слагаемое> ::= <множитель> {* <множитель>} //<Множитель> ::= <число> | (<выражение>) #include <iostream> using namespace std; typedef char TLexem; const char _Num = '1',
C++ Динамические одномерные масивы Не могу создать новый размер динамического массива. Статический работает как надо (мусор присутствует только в начале), а динамический нет (он такое впечатление вовсе не массив), в чем дело не пойму. Помогите, пожалуйста, а то уже по-всякому пробовал:help:. Фрагмент... int *A, B, k = 0; for(int i = 0; i < 15; i++) { k++; A = new int; B = A... подробнее

Показать сообщение отдельно
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
30.11.2012, 21:36     С++ VLA и прочее...
Пришла пора расставить всё на свои места.

Цитата Сообщение от 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
Миниатюры
С++ VLA и прочее...   С++ VLA и прочее...   С++ VLA и прочее...  

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