Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2020, 22:12   #1
nixanok
Новичок
Джуниор
 
Регистрация: 15.02.2020
Сообщений: 2
Вопрос Проблема с утечкой памяти.

У меня есть класс "Матрица", который создается динамически в зависимости от количеста столбцов и строк.В деструкторе я удаляю свою матрицу для избежания утечки памяти.К чему это я...При перегрузке оператора сложение и создания новой временной матрицы "тмп" в ней и возвращения ее для присваивания другой матрицы , вызывается заранее деструктор , который удаляет ее до всего этого.В итоге компилятор выдает ошибку , тк я обращаюсь к удаленной области памяти.Как избежать этого и не получить утечку памяти?Я пробовал создать метод удаления , но тогда я не могу удалить временную матрицу тмп(тк ее передаю, а в мейне у меня уже нет доступа к ней),снова получив утечку памяти.Помогите!)
Вложения
Тип файла: zip project_matrix.zip (2.0 Кб, 6 просмотров)
nixanok вне форума Ответить с цитированием
Старый 16.02.2020, 08:26   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

ты создаёшь объект на стеке
Код:
	Matrix tmp(this->s, this->c);
и возвращаешь ссылку на этот временный объект (потому что сигнатура функции говорит вернуть ссылку)
Код:
return tmp;
вот и приплыли

по логике там должна возвращаться ссылка на самое себя, то есть нужно

Код:
*this=tmp;//скопировали временную матрицу
return *this;//ссылка на себя
Алексей1153 вне форума Ответить с цитированием
Старый 17.02.2020, 18:58   #3
nixanok
Новичок
Джуниор
 
Регистрация: 15.02.2020
Сообщений: 2
По умолчанию

Но тогда первая матрица (3 = 1 + 2)(1- первая, this) тоже изменяется и становится идентичной 3
nixanok вне форума Ответить с цитированием
Старый 17.02.2020, 19:09   #4
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

nixanok, отсюда следует что? Правильно, возвращать нужно не ссылку, а объект

функция должна принимать две константные ссылки. Создавать объект, складывать туда оба входящих, возвращать полученный. Что-то вроде:

Код:
template<typename type_of_matrix>
Matrix<type_of_matrix> operator + (const Matrix<type_of_matrix>& m1,const Matrix<type_of_matrix>& m2)
{
        Matrix<type_of_matrix> m3=m1;
        m3+=m2;
        return m3;
}
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с утечкой оперативной памяти User90 Visual C++ 11 29.01.2013 21:54
CreateThread непонятки с утечкой памяти fucil Общие вопросы Delphi 3 15.01.2013 20:50
Проблема с утечкой памяти mr_cipher C# (си шарп) 10 28.08.2012 14:18
Проблема с утечкой памяти ExPeL Win Api 4 21.10.2010 22:13
самописный assert: проблема с утечкой памяти) sashonk Общие вопросы C/C++ 2 26.04.2010 15:58