42 / 42 / 27
Регистрация: 29.01.2013
Сообщений: 277
1

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

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

Author24 — интернет-сервис помощи студентам
Если ввести например 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.07.2013, 21:27
Ответы с готовыми решениями:

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

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

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

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

4
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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
55 / 55 / 6
Регистрация: 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
42 / 42 / 27
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:40  [ТС] 4
Я поправил расположение единицы, но при моём подходе всё равно ошибка. Я понял в чём дело. Деструктор вызывается дважды, нужен конструктор копий.
0
Tulosba
16.07.2013, 21:46     Ошибка при работе с памятью
  #5

Не по теме:

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.07.2013, 21:46

Ошибка в коде при работе с динамической памятью
Не могу понят что не так ? При вводе в динамический массив А последовательность &quot;61 3 2 0 -2 -25...

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

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

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


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

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

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