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

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

Восстановить пароль Регистрация
 
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:27     Ошибка при работе с памятью #1
Если ввести например 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2013, 21:27     Ошибка при работе с памятью
Посмотрите здесь:

C++ Ошибка при работе с памятью
Повреждена куча при работе с динам. памятью. Почему? Как исправить? C++
Ошибка при работе с портами C++
При перемножении матриц ошибка с памятью C++
Ошибка при работе со структурами C++
Ошибка при работе с мютексом C++
Ошибка в работе с памятью C++
Управление динамической памятью при работе с классами C++
Ошибка с памятью при работе с двумерными массивами. C++
Ошибка с памятью при работе класса и map C++
C++ Ошибка при работе со строками
Ошибка при работе с файлами C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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;
}
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];
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:40  [ТС]     Ошибка при работе с памятью #4
Я поправил расположение единицы, но при моём подходе всё равно ошибка. Я понял в чём дело. Деструктор вызывается дважды, нужен конструктор копий.
Tulosba
16.07.2013, 21:46     Ошибка при работе с памятью
  #5

Не по теме:

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

Yandex
Объявления
16.07.2013, 21:46     Ошибка при работе с памятью
Ответ Создать тему
Опции темы

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