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

Освобождение памяти в деструкторе класса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Работа с командной строкой. Отрытие вызываемых файлов http://www.cyberforum.ru/cpp-beginners/thread1235874.html
Добрый вечер форумчане. Составлена программа с аргументами командной строки. Hello, word C:\WINDOWS\system32\notepad.exe D:\comp11.txt D:\forma.exe И в свойствах проекта вот этот командный аргумент "C:\WINDOWS\system32\notepad.exe D:\comp11.txt", при запуске программы, ничего не запускает. Проверяя C:\WINDOWS\system32\notepad.exe D:\comp11.txt на командной строке - она работает. А...
C++ Найти ошибку при освобождении памяти Тут используется полиморфизм правильно, а вот очистка памяти в первом вроде правильно, а во втором нет...( Правильно такое или нет? FirstClass **arr; arr = new FirstClass*; FirstClass *c = new SecondClass(); FirstClass *d = new FirstClass(); FirstClass *e = new SecondClass(); arr = c; http://www.cyberforum.ru/cpp-beginners/thread1235862.html
C++ Составить алгоритм обхода игрового поля
Вобщем, такая тема: Дан двумерный массив чисел 12х12, который содержит числа от 0 до 5. 0 - дырка 1 - мое местоположение( при запуске приложения ) 2 - черный ящик( -здоровье ) 3 - красный ящик( +здоровье ) 4 - зеленый ящик( +защита ) 5 - положение противника( противник, как и сам игрок, один ).
Есть ли смысл помечать функции как inline, если их прототип уже есть в .h файле? C++
Есть ли смысл помечать функции как inline, если их прототип уже есть в .h файле? Функции в одну строчку, сразу в ретарне вычисляет возвращаемое значение.
C++ Память. Стек или куча - есть ли преимущества одного кода над другим? http://www.cyberforum.ru/cpp-beginners/thread1235708.html
Здравствуйте, хотел спросить в чем различия. В чем тут недостатки и преимущества разных способов? Apple apple(); и Apple *apple = new Apple(); delete apple; И обязательно ли после второго способа делать delete?
C++ Прокомментировать код помогите понять этот код int main(){ const int PASSWORD_LENGTH=10; const char * CORRECT_PASSWORD="130f1a8e9e102707f3f91b010f151b0b"; char *md5buf; char buf; setlocale( LC_ALL,"Russian" ); cin.exceptions(istream::failbit | istream::badbit); подробнее

Показать сообщение отдельно
nerti
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 5
29.07.2014, 16:30     Освобождение памяти в деструкторе класса
Перечитал по этому поводу много информации. Главный вопрос.
Есть класс в котором происходит динамическое выделение памяти.
В конструкторе я эту память хочу удалить.
Пробовал много методов вроде создания отдельной функции внутри класса, которая освобождает память и встраивания ее в деструктор. Постоянно вылетает ошибка.
Вопрос при удалении объекта класса динамически выделенная память сама по себе ведь не освобождается если не освободить ее явно или освобождается и это порождает ошибку?
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
class matrix
{
    int rows;
    int columns;
    double **Farray;
   public:
     matrix(int i = 4, int j = 4) { rows = i, columns = j;}
     double** fill(double *ptr);
     double** multiply(double** secondmatrix);
     bool operator==(matrix right); 
     void operator*(matrix ob);
         ~matrix () {
         for (int count = 0; count <  rows; count++)
     delete [] Farray[count];
          }
};
//---------------------------------------------------
 bool matrix :: operator==(matrix right) {
     return right.rows == rows; }
..............................
int main()
{
run()
system("pause");
return 0;
}
............................
...........................
void run()
{
matrix ob1, ob2;
.......................
    if(ob1 == ob2) 
      ob1*ob2;
    else 
      cout << "Matrixes can't be multiplied \n";
}
............................
//---------------------------------
//--------------------------------
//Память выделяется здесь.
void matrix :: operator*(matrix ob)
{
    cout << "The resultant matrix after multiplication: \n";
    double **result = new double* [rows]; 
            for (int count = 0; count < rows; count++)
            result[count] = new double [columns];
           for (int i = 0; i < rows; i++) {
            for (int k = 0; k < columns; k++) {
                double sum = 0;
             for (int e = 0; e < columns; e++) {
                 sum += Farray[i][e] * ob.Farray[e][k];
........................................................................................
Под многоточиями я пропускал ненужные функции и строки программы. Могу сказать все корректно работает. Если убрать деструктор из класса то все прекрасно работает и ошибка не вылетает. Если же описать действия, которые должны выполняться при вызове деструктора то вылетает ошибка.
А и ошибка вылетает по ходу выполнения программы, а не на этапе компиляции в месте, где должны умножаться матрицы. И вывод происходит левых значений.

Если имеет значение то делал в - VS2010.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru