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

Непонятные данные на выходе - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не могу скомпилировать http://www.cyberforum.ru/cpp-beginners/thread968439.html
Не могу скомпилировать нетлиб http://cpp-netlib.org/ Суть проблемы:
C++ Графика Октаэдр, graphics.h всем привет, помогите нарисовать Октаэдр, затем его зеркало, сдвиг на несколько градусов и затем увлечение его. спасибо. http://www.cyberforum.ru/cpp-beginners/thread968431.html
Дана строка символов. Выяснить имеются ли в данной строке рядом стоящие запятая и тире C++
Помогите написать пожалуйста программу: "Дана строка символов. Выяснить имеются ли в данной строке рядом стоящие запятая и тире." Спасибо.
Дана последовательность чисел. Сколько раз в ней встречается максимальное число? C++
Given a sequence of numbers. Find out how many times the maximum element of the sequence meets in the sequence. Input data. First line - n number,total amount of data in array. Then all aray is inputed. Output data. The one number representing total times of maximum number apperance in the sequence. Sample input: 7
C++ Проверить, является ли введенный символ строчной или заглавной буквой латинского алфавита http://www.cyberforum.ru/cpp-beginners/thread968394.html
Проверить, является ли введенный символ строчной или заглавной буквой латинского алфавита.
C++ Чтение из файла в массив Всем привет! Извините, если такая тема уже поднималась, но я ничего не нашла.... У меня такая задачка. Есть два файлика, в одном матрица цифр, а в другом столбик цифр.. Мне из надо засунуть в вектора.. Как запихнуть столбик в вектор я разобралась, а с матрицей никак не получается.. Матрица в файле A.txt, столбик в B.txt, например так A.txt 1 2 3 4 5 6 7 8 9 0 1 2 B.txt подробнее

Показать сообщение отдельно
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
03.10.2013, 21:53     Непонятные данные на выходе
Рассмотрим на примере.
По ходу выполнения программы.
Цитата Сообщение от dw6 Посмотреть сообщение
Stack s(100);
Это приводит к выполнению следующего кода
Цитата Сообщение от dw6 Посмотреть сообщение
Stack(int n){ mass=end=new int[n]; size=n; };
Тут у нас получается выделяется память под 100 записей. Размер стека равен 100 и масс и ент указывают на верхушку стека.
Далее идет код
Цитата Сообщение от dw6 Посмотреть сообщение
s.push(1);
Это соответственно ведет нас к следующему коду. И с первых строк начинается
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void push(int a) 
{ 
if(*end >= size-1)  //Если в верхушке стека находится значение больше максимального индекса стека !!!!!!
//Вопрос а что у нас там может храниться после выделения памяти.
//Да все что угодно. Оператор new не гарантирует обнуления выделенной памяти. Просто ее выделяет не заботясь  о том что раньше эта память "помнила"
//И если же вдруг там "хранились" данные больше размера
 {  
  size = 10 + 2 * size; //Мы странным образом увеличиваем размер почти в экспоненциальной зависимости. Не только постоянно удваивая его размер так еще сверху добавляя десять элементов. Зачем!!!!
  mass = (int*) realloc (mass, size * sizeof(int)); //тут я врать не буду. То что масс ссылается на дно увеличенного стека это понятно, но моих знаний не хватает, чтобы точно быть уверенным, что увеличенный стек будет лежать там-же где первоначальный. т.е. значение масс до реаллока и после будет одинаковым. А если оно станет разным, то куда же у нас станет указывать енд (вершина стека)
} 
*end=a; \\После всех изменений или без них. Мы в вершину стека засовываем значение (вспомним начальную провеку)
end++; \\И увеличиваем то ли на sizeof(int) то ли на 1 байт адрес вершины стека
 };
Дальше анализировать не буду. Оно понятно в какой каше варится стек.
 
Текущее время: 03:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru