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

Поведение неопределенной переменной - C++

Восстановить пароль Регистрация
 
SandWraith
 Аватар для SandWraith
187 / 187 / 13
Регистрация: 11.04.2009
Сообщений: 497
Завершенные тесты: 2
15.04.2011, 14:37     Поведение неопределенной переменной #1
Народ, поясните пожалуйста любопытную странность. Вот такой вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
class myclass
{ 
public: int i; myclass() {}
};
 
int main()
{ 
myclass c;
cout << "I:" <<  c.i << endl;
}
На моей машине стабильно выдает нули:
$ for ((a=1; a <= 8 ; a++)); do ./out; done;
I:0
I:0
I:0
I:0
I:0
I:0
I:0
I:0
Однако, если убрать << "I: ":
C++
1
cout <<  c.i << endl;
Программа выдает мусор:
$ for ((a=1; a <= 8 ; a++)); do ./out; done;
1581306624
997987408
1782514144
-723769888
669829280
-1128111856
-1799658848
-1780251024
В чем причина того, что в первом случае стабильно получаются нули?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2011, 14:37     Поведение неопределенной переменной
Посмотрите здесь:

Часть имени переменной как значние другой переменной C++
Переменной d присвоить первую цифру после запятой некоторой переменной x типа float C++
C++ Массив объектов класса неопределенной длины
C++ Компилятор считает функцию неопределенной
Получить доступ к переменной класса при наличии такого же имени переменной в функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
15.04.2011, 15:27     Поведение неопределенной переменной #2
В классе нет конструктора, верней есть его объявление и всёО_о
Ну а об инициализации переменной int i вообще молчу!Ты где её ввыодишь присваиваешь значение???
Понтно что бред программа выдаёт...
SandWraith
 Аватар для SandWraith
187 / 187 / 13
Регистрация: 11.04.2009
Сообщений: 497
Завершенные тесты: 2
15.04.2011, 15:41  [ТС]     Поведение неопределенной переменной #3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ну а об инициализации переменной int i вообще молчу!Ты где её ввыодишь присваиваешь значение???
Понтно что бред программа выдаёт...
i остается неопределнной, об этом сказано в заголовке треда. Вопрос был про разницу в поведении в двух вариантах кода.
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
15.04.2011, 15:49     Поведение неопределенной переменной #4
а что за компилятор?? у меня выдает мусор и в первом и во втором случаи.
SandWraith
 Аватар для SandWraith
187 / 187 / 13
Регистрация: 11.04.2009
Сообщений: 497
Завершенные тесты: 2
15.04.2011, 15:54  [ТС]     Поведение неопределенной переменной #5
Цитата Сообщение от Overmind024 Посмотреть сообщение
а что за компилятор?? у меня выдает мусор и в первом и во втором случаи.
Код
$  g++ -v                                                                                                
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.5.2/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: /build/src/gcc-4.5-20110127/configure --prefix=/usr --enable-languages=c,c++,fortran,objc,obj-c++,ada --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-gnu-unique-object --enable-lto --enable-plugin --enable-gold --with-plugin-ld=ld.gold --disable-multilib --disable-libstdcxx-pch --with-system-zlib --with-ppl --with-cloog --with-cloog-include=/usr/include/cloog-ppl --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info
Thread model: posix
gcc version 4.5.2 20110127 (prerelease) (GCC)
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
15.04.2011, 16:40     Поведение неопределенной переменной #6
Цитата Сообщение от SandWraith Посмотреть сообщение
В чем причина того, что в первом случае стабильно получаются нули?
По идее звёзды встали так, что при отсутсвии дополнительного кода (который появляется из-за << "I") эта часть стека в одном стабильно оказывается обнулённой, а во втором случае - нестабильно замусоренной. Переменная "c" лежит в стеке. До функции main работает целая куча других функций на том же самом стеке. С виду каких-то вразумтиельные причины назвать сложно

Добавлено через 1 минуту
У меня, например, при наличии "I:" стабильно выдаёт "I:134514640", а в отсутсвии - стабильно "-1208301348"
Yandex
Объявления
15.04.2011, 16:40     Поведение неопределенной переменной
Ответ Создать тему
Опции темы

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