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

Выбрасывает при выполнении - C++

Восстановить пароль Регистрация
 
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
06.11.2010, 01:00     Выбрасывает при выполнении #1
Пытаюсь написать хеадер для работы с большими числами, через разбиение на ряд чисел.
При компиляции ошибки не обнаруживаются но при выполнении программа прерывается.
подскажите где могут быть ошибки, которые не нравятся компилятору.
del.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream.h>
#include <vector>
 
using namespace std;
 
typedef unsigned short int usint;
 
 
class vlint
{
public:
    vlint(usint);
    void display();
    void pow(vlint &, usint);
    const vlint & operator = (const vlint &);
    vlint mult(usint);//умножение
private:
    vector <usint> mass;
};
 
 
vlint::vlint(usint a)
{
    for(;a;)
    {
        mass.push_back(a%10);
        a /= 10;
    }   
};
 
 
void vlint::display()
{
    for(int i = 0; i < mass.size(); i++)
        cout << mass[i] << ends;
};
 
 
 
void vlint::pow(vlint & a, usint p)
{
    vlint temp(a);
    for(int i = 1; i < p; i++)
        temp = a;//////недописано
};
 
 
const vlint & vlint::operator =(const vlint & rhs)
{
    if(&rhs == this) return *this;
    mass = rhs.mass;
    return *this;
};
 
vlint  vlint::mult(usint a)
{
    usint temp;
for(;a;)
{
    for(int i = 0;i < mass.size();i++)
    {
        mass[i] = mass[i]*(a%10);
        temp = mass[i]/10;
        mass[i] = mass[i]%10;
 
        if(i < mass.size())
        {
            mass[i+1] += temp;
            if(mass[i+1]/10)//переполнение при сумировании
            {
                if((i+1) < mass.size())
                    mass[i+2] += mass[i+1]%10;
                else 
                    mass.push_back(mass[i+2]%10);
            }
 
        }
        else
            mass.push_back(temp);// если следующей ячейки не существует
    }//end for i
    a /= 10;
}//end for a    
    return *this;
};
main :
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    vlint t(5);
    t.mult(5);
    t.display();
 
 
    _getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2010, 01:00     Выбрасывает при выполнении
Посмотрите здесь:

C++ Необработаное исключение при выполнении gets
Ошибка при выполнении C++
Ошибка при выполнении C++
Компилируется но при выполнении ошибка C++
C++ Ошибка при выполнении sqrt()
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
06.11.2010, 01:28     Выбрасывает при выполнении #2
Попробовал скомпилировать - работает без вылета.
Разве что при компиляции вылезало предупреждение на счёт iostream.h - решается подключением библиотеки iostream (#include <iostream>) вместо iostream.h (в том же Dev-cpp они в разных директориях, при этом при компилировании срр-файлов модули ищутся как раз в той папке, где находится "iostream", а не "iostream.h").
И еще ругается на _getch() (хотя может это проблемы моего компилятора). Я бы лучше использовал system("PAUSE") - по крайней мере будет видно запрос на нажатие клавиши.
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,213
Завершенные тесты: 1
06.11.2010, 01:33     Выбрасывает при выполнении #3
А как падает?

У мну под GCC все компилиться и запускается - выдает 5.

Цитата Сообщение от IchMors Посмотреть сообщение
if(i < mass.size())
строка 66 это условие всегда истинно
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
06.11.2010, 01:35  [ТС]     Выбрасывает при выполнении #4
Нашел ошибку!
В методе mult. Не поставил проверку на переполнение, если оно не существует... и 0 записывался за пределы вектора
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
vlint  vlint::mult(usint a)
{
    usint find;
    usint temp;
for(;a;)
{
    find = mass.size();
    for(int i = 0;i < find;i++)
    {
        mass[i] = mass[i]*(a%10);
        temp = mass[i]/10;
        mass[i] = mass[i]%10;
 
        if(temp)
        if((i+1) < mass.size())
        {
            mass[i+1] += temp;
            if(mass[i+1]/10)//переполнение при сумировании
            {
                if((i+2) < mass.size())
                    mass[i+2] += mass[i+1]%10;
                else 
                    mass.push_back(mass[i+2]%10);
            }
 
        }
        else 
            mass.push_back(temp);// если следующей ячейки не существует
    }//end for i
    a = a / 10;
}//end for a    
    return *this;
};

Цитата Сообщение от x1Mike7x Посмотреть сообщение
И еще ругается на _getch() (хотя может это проблемы моего компилятора). Я бы лучше использовал system("PAUSE") - по крайней мере будет видно запрос на нажатие клавиши.
да меня просто раздражает эта надпись...
а что за компилятор? у меня VS2008

Добавлено через 1 минуту
Цитата Сообщение от Oleg Посмотреть сообщение
строка 66 это условие всегда истинно
да... тут мой втык
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
06.11.2010, 01:47     Выбрасывает при выполнении #5
а что за компилятор? у меня VS2008
Dev-cpp (если точнее, то gcc)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.11.2010, 01:49     Выбрасывает при выполнении #6
IchMors, Долбанная досовская штука - _getch();
Смысла использовать в С++ нет никакого, ибо есть cin.get(); system("pause"); cin.peek(); и т.п.
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
06.11.2010, 01:55  [ТС]     Выбрасывает при выполнении #7
ForEveR, иногда при вводе текста cin.get(); и cin.peek(); пролетают, не срабатывают. маленький пример:
C++
1
2
3
4
5
6
    char c;
    cin >> c;
 
    cin.peek();
    cout << "a vot i getch";
    _getch();
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.11.2010, 01:56     Выбрасывает при выполнении #8
IchMors, cin.ignore(), cin.get()/cin.peek() никто не отменял. Два раза cin.get() тоже. Два раза cin.peek() тоже. cin.get(), cin.peek() also
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
06.11.2010, 02:06  [ТС]     Выбрасывает при выполнении #9
ForEveR, ну тогда уж лучше использовать cin.ignore(numeric_limits<std::streamsize>::max(),'\n');
на случай такого ввода:
C++
1
2
char c[2];
gets(c);
ну вот и зачем так извращаться, если есть _getch(), непонимать...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2010, 02:11     Выбрасывает при выполнении
Еще ссылки по теме:

Что будет выведено на экран при выполнении следующей программы при n = 5 ? C++
При выполнении разных операций с MS VS2013, например, при закрытии, иногда появляется ошибка C++
C++ Ошибка памяти при выполнении, при компиляции не выводит ошибки

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.11.2010, 02:11     Выбрасывает при выполнении #10
IchMors, Зачем извращаться, если можно компилировать в консоли, где окно не закрывается?
Зачем извращаться с _getch(), если есть system("pause");
Хотя все это не суть. Юзайте что вам нравится.
Yandex
Объявления
06.11.2010, 02:11     Выбрасывает при выполнении
Ответ Создать тему
Опции темы

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