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

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

Войти
Регистрация
Восстановить пароль
 
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
#1

Ошибка при работе с памятью - C++

16.07.2013, 21:27. Просмотров 386. Ответов 4
Метки нет (Все метки)

Если ввести например 6, 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
class MyExcept{
    
public:
    char *buf;
    MyExcept(char *comment){
        buf = new char[strlen(comment + 1)];
        strcpy(buf, comment);
    }
 
    ~MyExcept(void) { delete []buf; }
};
 
int main(void)
{
    int a, b;
 
    try{
        cin >> a >> b;
        if(!b) throw *(new MyExcept("zero"));
        cout << "a / b = " << a / b << endl;
    }catch(MyExcept ob){
        cout << "error: " << ob.buf << endl;
    }
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2013, 21:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при работе с памятью (C++):

Ошибка при работе с памятью - C++
Есть класс, в котором я предпринимаю безрезультатные попытки работать с динамической памятью из-за того, что экземпляров класса может быть...

Ошибка при работе с памятью - C++
Написан следующий код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;cstdlib&gt; #include...

Ошибка с памятью при работе класса и map - C++
В общем есть класс тест class test { public: test(void); ~test(void); test(const int&amp;); private:

Ошибка с памятью при работе с двумерными массивами. - C++
{ int i, j, c, kol; n=StrToInt(Edit1-&gt;Text); m=StrToInt(Edit2-&gt;Text); for(i=0; i&lt;n; i++) { for(j=0; j&lt;m; j++)...

Ошибка с памятью при работе с динамическим двумерным массивом - C++
Вроде всё правильно, но в ходе работы программа выдаёт ошибку(на скрине). Дело в двумерном динамическом массиве. Ниже код с функцией, куда...

Ошибка в работе с памятью - C++
После использования программы и последующего выхода из нее возникает ошибка HEAP CORRUPTION DETECTED. Хотелось бы узнать, в чем причина и...

4
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
16.07.2013, 21:28 #2
Цитата Сообщение от bgm123 Посмотреть сообщение
C++
1
throw *(new MyExcept("zero"))
вот это да Кто Вас научил так исключения кидать?
https://ideone.com/Jr1C9C
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
#include <string>
#include <iostream>
 
class MyExcept
{
public:
    const std::string message;
    MyExcept(const char *comment) : message( comment )  {}
};
 
int main(void)
{
    int a, b;
 
    try{
        std::cin >> a >> b;
        if(!b) throw MyExcept("division by zero");
        std::cout << "a / b = " << a / b << std::endl;
    }catch(MyExcept& ob){
        std::cout << "error: " << ob.message << std::endl;
    }
 
    return 0;
}
0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
16.07.2013, 21:31 #3
Цитата Сообщение от bgm123 Посмотреть сообщение
buf = new char[strlen(comment + 1)];
единица не там находится
C++
1
buf = new char[strlen(comment) + 1];
1
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:40  [ТС] #4
Я поправил расположение единицы, но при моём подходе всё равно ошибка. Я понял в чём дело. Деструктор вызывается дважды, нужен конструктор копий.
0
Tulosba
16.07.2013, 21:46     Ошибка при работе с памятью
  #5

Не по теме:

bgm123, зачем усложнять себе жизнь, если можно обойтись без ручного управления памятью?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 21:46
Привет! Вот еще темы с ответами:

Управление динамической памятью при работе с классами - C++
Всем привет! Есть очень сложный класс, внутри которого есть куча указателей, в его конструкторе все эти указатели получают память при...

Повреждена куча при работе с динам. памятью. Почему? Как исправить? - C++
Приветствую всех! Такая проблема: Вот есть код. В нем периодически появляются ошибки, а иногда и не появляется, и все хорошо работает....

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

Не является внутренней или внешней командой - ошибка не при компиляции а при работе программы - C++
В VS скомпилировал код #include &lt;iostream&gt; using namespace std; int main() { int a; cout&lt;&lt;&quot;Hallo&quot;; cin&gt;&gt;a; cout&lt;&lt;a; ...


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

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

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