IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> странное поведение элементарной программы.., с++
сообщение
Сообщение #1


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Добрый день!
Приступил к изучению c++, ну и начал писать дурацкие программки для понятия основ синтаксиса.. Вот собственно одна из них:
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
int main(void){
bool b(true);
string nick;
string name;
while (b==true){
cout << "Введите Ваше имя:\t";
cin >> name;

cout << "Введите Ваш ник:\t";
cin >> nick;

cout << "Вы:\t" << name << " aka " << nick << "\nПравильно?(Y/N)";
char ch('0');
while( (ch!='Y') && (ch!='y') && (ch!='N') && (ch!='n') )
cin >> ch;
b = ((ch=='N') || (ch=='n'));
}
char ch('0');
cout << "Привет!\n" << nick << ", не хочешь ли сыграть?(Y/N)";
while( (ch!='Y') && (ch!='y') && (ch!='N') && (ch!='n') )
cin >> ch;
b = ((ch=='Y') || (ch=='y'));
if (b==true){
cout << "Удачи, " << name << "!\n";
const int number(5); //количество элементов
vector<int> fib(number);//ряд Фиббоначи
fib[0]=1;
fib[1]=1;
for(int i(2); i<=number; ++i)
fib[i]=fib[i-2]+fib[i-1];
srand(number);
unsigned short num_right( 0 );
unsigned short num_wrong( 0 );
while (b==true){
int k(rand() % (number-2) + 2); //номер угадуемого числа
cout << "Первый:" << fib[k-2] << "\tВторой:" << fib[k-1] << "\tТретий:";
int usr_uns; //ответ пользователя
cin >> usr_uns;
if (usr_uns == fib[k]){
cout << "Ура!\n";
++num_right;
}
else{
switch (++num_wrong)
{
case 1: cout << "Не плохо.. Но.."; break;
case 2: cout << "Можно и лучше.."; break;
case 3: cout << "Ну.."; break;
default: cout << "Увы.."; b=false; break;
}
cout << '\n';
}
}
cout << "Ваш счет: " << num_right << '\n';
}
else
{
cout << "Ну.. Как хочешь..\n";
}
cout << "Ok\n";
return 0;
}


Вот.. Но если соглашаться на "игру", то происходит ошибка времени исполнения или утечка памяти или...(?). Лог в атаче(локаль utf-8). Почему так?
компилятор: g++ (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
ide: eclipse
Заранее благодарен.

Сообщение отредактировано: compiler -


Прикрепленные файлы
Прикрепленный файл  log.txt ( 2.65 килобайт ) Кол-во скачиваний: 270


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
сообщение
Сообщение #2


Гость






		for(int i(2); i<=number; ++i)
fib[i]=fib[i-2]+fib[i-1];
blink.gif Ты вектору сколько элементов выделял? 5? Это от 0 до 4, а попытка обращения к 5-му зачем?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Цитата(volvo @ 12.06.2008 18:56) *
...а попытка обращения к 5-му зачем?
Упс.. Совсем не смотрел туда.. Спасибо!
А почему это проявляется так позно?(как я понимаю, при освобождении вектора)


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
The most important issue for the caller is whether these operations perform range checking. Only at() performs range checking. If the index is out of range, it throws an out_of_range exception (see Section 3.3). All other functions do not check. A range error results in undefined behavior.
В твоем случае UB выражается в том, что ты видишь (ошибка при освобождении вектора), в другом - может быть что-то другое...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Цитата(volvo @ 12.06.2008 19:10) *
в другом - может быть что-то другое...
спасибо.. буду знать..


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 1:29
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name