1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
1

Не срабатывает исключение

15.03.2019, 18:14. Показов 1219. Ответов 4

Author24 — интернет-сервис помощи студентам
Есть класс, реализующий массив целых. Так же есть абстрактный класс Exception, который содержит два атрибута с описанием ошибки и ее кодом и абстрактную функцию log, которая их выводит на экран. От этого класса наследуется класс IndexException. В классе массива целых есть функция print(n), где n - количество символов, выводимых на печать. Если n >= массива целых, то должна создаться объект IndexException и переходить в catch блок. Но на практике при таком раскладе происходит ошибка памяти.
Array.cpp:
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
#include "Array.h"
#include <iostream>
#include "IndexException.h"
 
 
Array::Array(unsigned int n)
{
    size = n;
    arr = new int[size];
    std::cout << "Enter the elents of array:" << std::endl;
    for (unsigned int i = 0; i < size; i++)
        std::cin >> arr[i];
 
}
 
Array& Array::operator--() {
    for (unsigned int i = 0; i < this->size; i++)
        this->arr[i] -= 1;
 
    return *this;
}
 
 
Array::~Array()
{
}
 
void Array::print(int n) {
    if (size < n) {
        IndexException err;
        throw err;
 
    }
    else {
        for (unsigned int i = 0; i < n; i++)
            std::cout << this->arr[i] << std::endl;
    }
}
Source.cpp:
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
#include <iostream>
#include "Exception.h"
#include "IndexException.h"
#include "Array.h"
 
int main() {
    std::cout << "Input size of array:" << std::endl;
    int n;
    std::cin >> n;
    Array* bb = new Array(n);
    std::cout << "Input set-size:" << std::endl;
    int x;
    std::cin >> x;
    try {
        bb->print(x);
    }
    catch (Exception *error) {
        ((IndexException*)error)->log();
    }
    bb--;
    std::cout << "Input set-size:" << std::endl;
    int k;
    std::cin >> k;
    try {
        bb->print(k);
    }
    catch (Exception *error) {
        ((IndexException*)error)->log();
    }
 
}
Добавлено через 2 минуты
P.S. знаю, что вызов оператора -- неправильный, но даже если ошибиться с вводом n в первый раз, исключение все равно не срабатывает.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2019, 18:14
Ответы с готовыми решениями:

Срабатывает исключение
Почему то на методе факториала не обрабатывается исключение

Непонятно почему каждый раз срабатывает исключение
Почему-то кажддый раз срабатывает исключение invalid_argument, даже когда ввожу числа,...

Исключение работает не корректно: при вводе размера массива -2 не срабатывает catch (bad_alloc)
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;new&gt; #include &lt;stdexcept&gt; using namespace std;...

Не срабатывает исключение
Здравствуйте! Проблема состоит в том, что когда я меняю размер матрицы, исключение не срабатывает ...

4
1536 / 456 / 101
Регистрация: 17.05.2015
Сообщений: 1,424
15.03.2019, 18:34 2
Цитата Сообщение от xi8 Посмотреть сообщение
catch (Exception *error)
Заменить на:
C++
1
catch (const Exception& error)
0
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
15.03.2019, 21:37  [ТС] 3
Если так прописать, то не будет работать конвертация указателя Exception в IndexException.
0
6091 / 3449 / 1402
Регистрация: 07.02.2019
Сообщений: 8,769
15.03.2019, 21:45 4
Лучший ответ Сообщение было отмечено xi8 как решение

Решение

C++
1
2
3
4
5
    throw IndexException();
    //......
    catch(IndexException& err){
        err.log();
    }
0
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
16.03.2019, 00:06 5
xi8, непонятно как, если
Цитата Сообщение от xi8 Посмотреть сообщение
абстрактный класс Exception
и
Цитата Сообщение от xi8 Посмотреть сообщение
От этого класса наследуется класс IndexException
последний может не включать хедер первого. По идее вы не унаследуете если не увидите определение родителя. Но если так, то почему вы включаете оба хедера?
C++
1
2
3
#include <iostream>
#include "Exception.h"
#include "IndexException.h"
? Там выставлены стражи или просто названия хедеров не соответствуют их содержанию.
Вечер... Может я не понимаю?
И ещё, попробуйте бросить исключение боз всяких if'ов. Если вылетает другое исключение, то ошибка где-то раньше и до вашего просто не доходит очередь, так как вы не обрабатываете это исключение.
0
16.03.2019, 00:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2019, 00:06
Помогаю со студенческими работами здесь

Не срабатывает исключение
Можно удалять)

не срабатывает исключение
Здравствуйте, не срабатывает исключение при вводе значений выходящих за пределы,что я делаю не так?...

Не срабатывает событие на исключение
Вот эта часть кода никак не хочет работать. Если не коннектится IdSMTP1, ну, выкинь ты окошко -...

При изменении в БД срабатывает исключение
Вот код, сохранение в БД //Метод изменение данных пользователь public void...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru