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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
IchMors
97 / 93 / 4
Регистрация: 16.05.2010
Сообщений: 310
#1

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

06.11.2010, 01:00. Просмотров 411. Ответов 9
Метки нет (Все метки)

Пытаюсь написать хеадер для работы с большими числами, через разбиение на ряд чисел.
При компиляции ошибки не обнаруживаются но при выполнении программа прерывается.
подскажите где могут быть ошибки, которые не нравятся компилятору.
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2010, 01:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выбрасывает при выполнении (C++):

При использовании статической библиотеки выбрасывает неизвестную ошибку - C++
Код ошибки 0x800700c1. Гугл говорит, что может быть виноват Boost, но он тут даже не используется.Не дается никаких дополнительных...

Что будет выведено на экран при выполнении следующей программы при n = 5 ? - C++
Пожалуйста, очень прошу помогите с тестами(( 3)Что будет выведено на экран при выполнении следующей программы при n = 5 ? ...

Ошибка памяти при выполнении, при компиляции не выводит ошибки - C++
ПОмогите плс программа вводит строку символов до точки, а после вычисляет процент согласных в этой строке и выводит их в обратном порядке....

При выполнении разных операций с MS VS2013, например, при закрытии, иногда появляется ошибка - C++
В кодерстве совсем-совсем новичёк, поэтому извиняйте за нубость вопроса. Пытаюсь разобраться в программе MS Visual Studio 2013 (ставил под...

Ошибка при выполнении - C++
Когда запускаю программу на выполнение, выдает ошибку: Linker Error: Undefined symbol input(char near*,int near*, int) in module ...

Ошибка при выполнении - C++
Привет всем. Скажите пожалуйста, что мне делать? При выполнении программы выдает ошибку &quot;Инструкция по адресу &quot;0x004013bd&quot; обратилась к...

9
x1Mike7x
217 / 130 / 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") - по крайней мере будет видно запрос на нажатие клавиши.
1
schdub
2952 / 1297 / 239
Регистрация: 19.01.2009
Сообщений: 3,411
Завершенные тесты: 1
06.11.2010, 01:33 #3
А как падает?

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

Цитата Сообщение от IchMors Посмотреть сообщение
if(i < mass.size())
строка 66 это условие всегда истинно
1
IchMors
97 / 93 / 4
Регистрация: 16.05.2010
Сообщений: 310
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 это условие всегда истинно
да... тут мой втык
0
x1Mike7x
217 / 130 / 6
Регистрация: 06.11.2010
Сообщений: 234
06.11.2010, 01:47 #5
а что за компилятор? у меня VS2008
Dev-cpp (если точнее, то gcc)
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
06.11.2010, 01:49 #6
IchMors, Долбанная досовская штука - _getch();
Смысла использовать в С++ нет никакого, ибо есть cin.get(); system("pause"); cin.peek(); и т.п.
0
IchMors
97 / 93 / 4
Регистрация: 16.05.2010
Сообщений: 310
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();
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
06.11.2010, 01:56 #8
IchMors, cin.ignore(), cin.get()/cin.peek() никто не отменял. Два раза cin.get() тоже. Два раза cin.peek() тоже. cin.get(), cin.peek() also
0
IchMors
97 / 93 / 4
Регистрация: 16.05.2010
Сообщений: 310
06.11.2010, 02:06  [ТС] #9
ForEveR, ну тогда уж лучше использовать cin.ignore(numeric_limits<std::streamsize>::max(),'\n');
на случай такого ввода:
C++
1
2
char c[2];
gets(c);
ну вот и зачем так извращаться, если есть _getch(), непонимать...
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
06.11.2010, 02:11 #10
IchMors, Зачем извращаться, если можно компилировать в консоли, где окно не закрывается?
Зачем извращаться с _getch(), если есть system("pause");
Хотя все это не суть. Юзайте что вам нравится.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2010, 02:11
Привет! Вот еще темы с ответами:

Ошибка при выполнении программы. - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;time.h&gt; #include &lt;cstdlib&gt; using namespace std; int main () { int n, m, k; ...

Ошибки при выполнении поиска - C++
Ребят помогите,почему не выполняются поиски? #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;locale.h&gt; #include &lt;time.h&gt; ...

Ошибка при выполнении sqrt() - C++
При попытке выполнить следующий код: double sq = sqrt(2); компилятор говорит: Как исправить ситуацию?

Ошибка при выполнении программы - C++
//set.h #pragma once typedef unsigned short WORD; class Set { private: int minElem; int maxElem;


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
06.11.2010, 02:11
Ответ Создать тему
Опции темы

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