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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2010, 19:15   #1
ignis_divine
 
Регистрация: 11.09.2010
Сообщений: 5
По умолчанию Потеря значений динамического массива при выходе из конструктора

Есть класс с переменными int и двумерным массивом int**, в конструкторе значения инициализируются нормально, но при выходе из конструктора и запуске методов использующих массив вылетают исключения при попытке обрщения к элементу массива.


head.cpp

Цитата:
#
include "Matrix.h"
#include "stdafx.h"
#include "iostream"


int _tmain(int argc, _TCHAR* argv[])
{
Matrix first(5,5);
first.display();
return 0;
}
Matrix.h:

Цитата:
#pragma once

class Matrix
{
private:
int x, y;
int** mx;
public:
Matrix(void);
Matrix(int x, int y);
Matrix(const Matrix &);
~Matrix(void);
void fill_hand();
void display();
void fill_rand();
};
Matrix.cpp:

Цитата:
#include "Matrix.h"
#include "stdlib.h"
#include <iostream>

using namespace std;

Matrix::Matrix(void)
{
}

Matrix::Matrix(int x1, int y1)
{
x = x1;
y = y1;

int** mx;
mx = new int*[x];
for (int i = 0; i < x; i++)
{
mx[i] = new int[y];
for (int j = 0; j < y; j++)
{
mx[i][j] = 0 ;
}
cout<<endl;
}
}

Matrix::Matrix(const Matrix &from)
{
Matrix to(from.x, from.y);

to.x = from.x;
to.y = from.y;

for (int i = 0; i < to.x; i++)
{
for (int j = 0; j < to.y; j++)
{
to.mx[i][j] = from.mx[i][j];
}
}
}

Matrix::~Matrix(void)
{
for (int i = 0; i < y; i++)
{
delete[] mx[i];
}
delete [] mx;

}

void Matrix::fill_rand()
{
for (int i = 0; i < x; i++)
{
for (int j = 0; i < y; j++)
{
mx[i][j] = rand()%50;
}
}
}

void Matrix::fill_hand()
{
cout<<"Please enter the values of matrix[";
cout<<x<<"]"<<"["<<y<<"] in integer format.";
for (int i = 0; i < x; i++)
{
for (int j = 0; i < y; j++)
{
cout<<"\n"<<x<<" "<<y<<"element: ";
cin>>mx[i][j];
}
}
}

void Matrix:isplay()
{
//System("cls");
cout<<"Matrix:";
for (int i = 0; i < x; i++)
{
cout<<"\n";
for (int j = 0; j < y; j++)
{
cout<<" "<<mx[i][j];
}
}
char c;
cin>>c;

}
ignis_divine вне форума Ответить с цитированием
Старый 11.09.2010, 19:23   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Зачем в конструкторе локальная переменная mx? Она перекрывает одноименный член класса, потому вся работа в конструкторе идёт с локальной переменной.
pu4koff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
rsort(), потеря ключей массива dekameron PHP 6 01.09.2010 21:50
Потеря значений. С++ Снежинкина Помощь студентам 0 27.05.2010 13:03
Ошибка при очистке динамического массива. S_Yevgeniy Помощь студентам 4 24.12.2009 18:45
работа с функциями при создании динамического массива в С++ серг Помощь студентам 2 14.12.2009 16:33
почему может возникать ошибка access violation...: write of address при создании динамического массива sleevman Помощь студентам 16 03.11.2009 20:49