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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2013, 21:59   #1
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию с++ проблемма в деструкторе

Код:
// ConsoleApplication68.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <locale.h>

class Matrix
{protected:
  float **InitMatrix;
   int ISizeOfMatrix;
   int JSizeOfMatrix;
public:
	/*ввод*/   friend std::istream &operator>>(std::istream &Stream,Matrix &a)   
	{
		for (int NumberI = 0;NumberI<a.ISizeOfMatrix;NumberI++){
			for (int NumberJ = 0;NumberJ<a.JSizeOfMatrix;NumberJ++){
				std::cout<<"["<<NumberI<<"]"<<"["<<NumberJ<<"] = ";
              Stream>>a.InitMatrix[NumberI][NumberJ];
			  }
			

		}
			std::cout<<"______________________________"<<std::endl;
		return Stream;
	
	}
	 /*вывод*/ friend std::ostream &operator<<(std::ostream &Stream,Matrix &a)
	{
		for (int NumberI = 0;NumberI<a.ISizeOfMatrix;NumberI++)
		{
			for (int NumberJ = 0;NumberJ<a.JSizeOfMatrix;NumberJ++)
			{
				std::cout<<"["<<NumberI<<"]"<<"["<<NumberJ<<"] = ";
			    Stream<<a.InitMatrix[NumberI][NumberJ];
			}
			Stream<<std::endl;
		
		}
		Stream<<"______________________________"<<std::endl;
		return Stream;
	}
	 /*конструктор*/                             Matrix(int SizeI ,int  SizeJ)
	 {       
		 ISizeOfMatrix = SizeI;
	    JSizeOfMatrix = SizeJ;
           InitMatrix = new float*[ISizeOfMatrix];
		for (int Number = 0;Number<ISizeOfMatrix;++Number)		{
			InitMatrix[Number] = new float[JSizeOfMatrix];

		}
		
		  }
	 Matrix():ISizeOfMatrix(3),JSizeOfMatrix(3)
	 {
	    InitMatrix = new float*[ISizeOfMatrix];
		for (int i = 0;i<ISizeOfMatrix;i++)
		{
		InitMatrix[i] = new float[JSizeOfMatrix];
		
		
		}
	 
	}
	 /*деструктор*/                                                  ~Matrix()
								  { 
									 for (int  i = 0;i<ISizeOfMatrix;++i){
										if (InitMatrix[i]) {
									  delete[] InitMatrix[i];
										}
										 }
									 if (InitMatrix){
										 delete InitMatrix;}

								
								  }
	 /*+*/ Matrix &operator+(Matrix &Element)
	{ 
		
		
		 if((this->ISizeOfMatrix != Element.ISizeOfMatrix) ||(this->JSizeOfMatrix != Element.JSizeOfMatrix)){
             std::cout << "Different sizes" << std::endl;
             return *this;}else {
                
				 Matrix &Result = *this;
				
				for (int NumberI = 0;NumberI<this->ISizeOfMatrix; NumberI++)
		 {
             for (int NumberJ = 0;NumberJ<this->JSizeOfMatrix;NumberJ++)
			 {
 Result.InitMatrix[NumberI][NumberJ] += Element.InitMatrix[NumberI][NumberJ];
             }
		 }
		 return Result;
			 }
     
     }
/*возведение в степень*/                       Matrix  &operator()(int Degree)
	{  std::cout<<"возведение в "<<Degree<<"степень"<<std::endl;
	if (this->ISizeOfMatrix !=this->JSizeOfMatrix){ 
		std::cout<<"матрица не квадратная значение не изменилось"<<std::endl ;
		return *this;}
	else
	 { //вводные матрицы
float** tmp1 = new float*[ISizeOfMatrix];
float** tmp2 = new float*[ISizeOfMatrix];
float** tmp3 = new float*[ISizeOfMatrix];
//выделение матрицы
for (int I = 0;I<ISizeOfMatrix;++I) {
    tmp1[I] = new float[ISizeOfMatrix];
    tmp2[I] = new float[ISizeOfMatrix];
	}
//приравнивание 
for (int I = 0;I<ISizeOfMatrix;++I)
for (int J = 0;J<ISizeOfMatrix;++J)
tmp2[I][J] = InitMatrix[I][J];
//само возведение в степень
for (int CurrDeg = 1;CurrDeg<Degree;CurrDeg++){
    tmp3 = tmp2;
    tmp2 = tmp1;
    tmp1 = tmp3;
for (int I = 0;I<ISizeOfMatrix;++I)
for (int J = 0;J<ISizeOfMatrix;++J) {
tmp2[I][J] = 0;
for (int K = 0;K<ISizeOfMatrix;++K)
tmp2[I][J] += tmp1[I][K]*InitMatrix[K][J];
            }
}
for (int i = 0;i<ISizeOfMatrix;i++)
{
	delete[] tmp1[i];
	delete[] InitMatrix[i];


}
delete [] tmp1;
delete[]InitMatrix;
InitMatrix = tmp2;
    return *this;
	}
}
	/*приравнивание*/                       Matrix& operator=(Matrix &Element)
	{
		for (int NumberI = 0;NumberI<this->ISizeOfMatrix;NumberI++){
		for (int NumberJ = 0;NumberJ<this->JSizeOfMatrix;NumberJ++)
    {InitMatrix[NumberI][NumberJ] = Element.InitMatrix[NumberI][NumberJ];}}
			return *this;}
	/*обращение по индексу*/            float &operator()(int SizeI,int SizeJ){ 
		return this->InitMatrix[SizeI][SizeJ];} 
};

int main(int argCount , char** arguments)
{
	setlocale(2,"rus");
	Matrix a(3,3);
	std::cout<<"матрица A"<<std::endl;
	std::cin>>a;
	std::cout<<a;
	Matrix b(3,3);
	std::cout<<"Матрица В"<<std::endl;
	std::cin>>b;
    std::cout<<"a(1,0)+b(1,0) ="; 
    float q = a(1,0)+b(1,0);  std::cout<<q<<std::endl;
	std::cout<<a(3);
     Matrix t= b+a;
	std::cout<<"матрица а:"<<std::endl<<a;
	std::cout<<"матрица b(a+b):"<<std::endl<<t<<std::endl<<b;
 
   system("pause");
	return 0;
}
что вообще значит это ?
Изображения
Тип файла: png Безымянный45.png (30.4 Кб, 48 просмотров)

Последний раз редактировалось proef; 22.10.2013 в 22:04.
proef вне форума Ответить с цитированием
Старый 22.10.2013, 22:12   #2
proef
Форумчанин
 
Регистрация: 08.06.2013
Сообщений: 133
По умолчанию

адрес постоянно меняется
proef вне форума Ответить с цитированием
Старый 23.10.2013, 13:19   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

proef

что вообще значит это ?

значит баг в программе.
Rififi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение и освобождение памяти в конструкторе и деструкторе abc7 Общие вопросы C/C++ 4 20.02.2013 16:58
vector в деструкторе класса wowhow Общие вопросы C/C++ 4 16.11.2012 14:32
Расхождение адресов в конструкторе и деструкторе _-Re@l-_ Общие вопросы C/C++ 13 13.08.2011 20:31
проблемма с С++ lokobum Общие вопросы C/C++ 17 04.11.2009 14:50
Проблемма c if Crivel Помощь студентам 8 08.08.2008 15:28