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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2011, 21:16   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
	matrix* operator*(int m)
	{
		matrix temp(size);
		for(int i=0;i<size;i++)
		{
			for(int j=0;j<size;j++)
			{
				temp.x[i][j]=x[i][j]*m;}
		}
		return &temp;
	}
всего один символ изменил(возвращаем теперь указатель).
и отныне это преступный код(как раз указатель на труп).
с ссылками поидее тоже самое должно быть.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.12.2011, 21:23   #12
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

остались непонятные моменты:

1. А память освобождать не надо, что ли? Утечки памяти никого не волнуют?

2.

Код:
{
		for(int i=0;i<size;i++)
		{
			for(int j=0;j<size;j++)
			{x[i][j]=x[i][j]*m2;}
		}
		return *this;
	}
	};               //вот здесь закончилось объявление класса
	matrix(x1);   //вот здесь начались боевые действия
	matrix(x2);  //А чему x1 равен? Где вообще точка входа в программу?
	matrix(x3);
	x1=(x2+x3)*2;
	x1.vivod();
Весь код в студию пожалста
_Bers вне форума Ответить с цитированием
Старый 27.12.2011, 21:33   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
1. А память освобождать не надо, что ли? Утечки памяти никого не волнуют?
не было new, не нужен и delete.
это если про перегрузку саму.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.12.2011, 21:42   #14
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
не было new, не нужен и delete.
это если про перегрузку саму.
У него конструкторы память кушают. И нет ни одного диструктора.
Поэтому каждый созданный объект делает утечку. Это при том, что каждый оператор создаёт такие объекты.

Каждый вызов метода - плюс ещё одна утечка.
_Bers вне форума Ответить с цитированием
Старый 27.12.2011, 22:14   #15
Furchtlos
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 20
По умолчанию

А что, память не выгрузится при закрытии прилаги? И где мне выгрузить временный? Если я его деструктну, то как его возвратить потом? Да и почему это они вообще живы? Код закончился, он и сдохнет. Это весь код. Ниже только return 0 от мэйна.
Furchtlos вне форума Ответить с цитированием
Старый 27.12.2011, 22:16   #16
Furchtlos
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 20
По умолчанию

x1 равен тому, что я введу. У меня в конструкторе ввод нужных данных.
Furchtlos вне форума Ответить с цитированием
Старый 27.12.2011, 22:36   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
А что, память не выгрузится при закрытии прилаги? И где мне выгрузить временный? Если я его деструктну, то как его возвратить потом? Да и почему это они вообще живы? Код закончился, он и сдохнет. Это весь код. Ниже только return 0 от мэйна.
это тут, но приучайтесь писать код как положенно, ибо к return 0 объект должен сам вернуть все ресурсы.(точнее не к ретурну, а тогда кода объект будет уничтожен, не важно конец или не конец приложения)
а в деструкторе и надо делать delete тому что было new

PS: представьте если мой лексический анализатор не будет возвращать память...он же сожрет все(анализатор довольно мощный и гибкий)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.12.2011, 23:10   #18
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Furchtlos Посмотреть сообщение
А что, память не выгрузится при закрытии прилаги? И где мне выгрузить временный? Если я его деструктну, то как его возвратить потом? Да и почему это они вообще живы? Код закончился, он и сдохнет. Это весь код. Ниже только return 0 от мэйна.
1.
То есть, ты нагадил, а подчищать за тобой пусть кто-то другой будет, да? Это у тебя такой подход к жизни, да?
Пусть кто-то другой за тобой приберет, там, мама, папа, операционная система?

А у тебя каждый перегруженный оператор утечку делает. Ты в курсе?

Ты знаешь, что если new не сможет выделить память, то она бросит исключение? И если это исключение не обработать - процесс упадёт ещё до того, как выполнит свой последний return.

А то давай, протестим? Будем в холостую запускать методы твой матрицы в цикле, и посмотрим, через сколько милисекунд все приложение упадёт от нехватки памяти?

2. В коде, который ты выложил нет никакой функции main.
Не понятно что именно ты пытаешься скомпилировать.

А значит нельзя воссоздать условия, при которых твой код ломается.
А значит нельзя искать ошибки (есть риск найти совсем другие ошибки, или не найти вовсе).

Поэтому, выкладывай весь код, который ты компилируешь. Либо помочь тебе сможет только программист с развитыми телепатическими способностями.
_Bers вне форума Ответить с цитированием
Старый 27.12.2011, 23:17   #19
Furchtlos
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 20
По умолчанию

А в свой мэйн запхать не?
Ну так покажите ГДЕ там утечка? Я не понимаю.
Если оно само подчищает, то зачем мне?
Вы выше утверждали, что объект не будет жив. Так как я его убью, возвратив его? КОГДА мне нужно его выгрузить?
Цитата:
#include "stdafx.h"
#include "iostream"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
Код в первом посте
system("PAUSE");
return 0;
}

Последний раз редактировалось Furchtlos; 27.12.2011 в 23:20.
Furchtlos вне форума Ответить с цитированием
Старый 27.12.2011, 23:26   #20
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Ну так покажите ГДЕ там утечка? Я не понимаю.
в конструкторе есть new(и не один), соответственно в деструкторе обьекта должен быть delete всего этого.
Цитата:
Если оно само подчищает, то зачем мне?
оно не подчищает, подчищает ОС при смерти процесса, а если процесс не умирает, а ему нужно делать чтото долгое время?
ведь так и засрет все.
Цитата:
Так как я его убью, возвратив его? КОГДА мне нужно его выгрузить?
объект умрет сам, но он должен утащить с собою все свое в деструкторе.
Цитата:
Вы выше утверждали, что объект не будет жив.
да, но с ним автоматически умрут тольк плоские типы данных(не данные по указателям).
данные из указателей обьект должен уничтожать сам(если это его данные)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с перегрузкой оператора потока в классах - << monolit111 Общие вопросы C/C++ 13 27.11.2011 20:40
Программа на языке С с использованием условных операторов и операторов цикла. Valentin Pirgach Помощь студентам 0 17.10.2011 20:16
Проблема с перегрузкой операторов в C++ StudentofSUSU Помощь студентам 2 30.09.2010 10:04
Проблема с перегрузкой операторов, не могу разобраться mrLee Помощь студентам 1 30.01.2010 00:23
Проблема с перегрузкой операторов, не могу разобраться mrLee Общие вопросы C/C++ 0 29.01.2010 18:45