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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2010, 23:09   #1
evoz23
Новичок
Джуниор
 
Регистрация: 19.09.2010
Сообщений: 2
По умолчанию Ошибка в классе С++

есть вот такой класс:
Код:
class Matrix
{ private: int N;
Vector<T>* str;
public:
Matrix(int _N=3);
~Matrix(void);
Matrix(const Matrix<T>&c);

Vector<T>& operator [] ( int num);
Matrix<T>& operator + (const Matrix<T> &a);
Matrix<T>& operator += (const Matrix<T>& a);
Matrix<T>& operator - (const Matrix<T>& a);
void resize( Matrix<T> &a ,int s_new );
void init( Matrix<T> &a ,Matrix<T> &b,int elem );
Matrix<T>& operator= (Matrix<T> &a);
Matrix<T>& operator * (T a);

friend ostream& operator << (ostream& os,const Matrix<T>& matrix)
{
os << " " <<endl;
for(int i=0;i<matrix.N;i++)
os<<matrix.str[i]<<endl;
return os;
}
friend istream& operator >> (istream& is,Matrix<T>& matrix)
{
for(int i=0;i<matrix.N;i++)
is>>matrix.str[i];
return is;
}

};

template<class T>
Matrix<T>::Matrix(int _N)
{N=_N;
str=new Vector<T>[N];
for(int i=0;i<N;i++)
str[i]=Vector<T>(i+1);
}	
template<class T>
Matrix<T>::~Matrix(void)
{	

delete[] str;}
template<class T>
Matrix<T>:: Matrix(const Matrix <T> &c )
{	N=c.N;
str=new Vector<T>[N];
for(int i=0;i<N;i++)
str[i]=c.str[i];
}
template<class T>
Vector<T>& Matrix<T>:: operator[] (int num)
{return str[num];
}
template<class T>
Matrix<T>& Matrix<T>:: operator= (Matrix<T> &a)
{
if (N==a.N)
{
for(int i=0;i<N;i++)
str[i]=a.str[i];
}
else 
{N=a.N;
delete [] str;
str = new Vector<T>[N];
for(int i=0;i<N;i++)
str[i]=a.str[i];
}
return *this;
}


template<class T>
void Matrix<T>:: resize( Matrix<T> &a ,int s_new )
{/*Matrix<T> *temp;
temp= new Matrix<T>(s_new);
a=&temp;*/
delete[] a.str;
a.N=s_new;
a.str=new Vector<T>[a.N];
for(int i=0;i<a.N;i++)
a.str[i]=Vector<T>(i+1);

}
и вот такой главный файл:

Код:
int _tmain(int argc, _TCHAR* argv[])
{	
setlocale(LC_CTYPE, "russian");
cout<<"Эта программа выполняет действия над матрицами особого вида.";
cout<<endl;
int n=3;

Matrix<double> matr_a(n), matr_b(n), matr_c(n),pro(n);
cout<<" Введи размерность матрицы а "<<" ";
cin >> n;
pro.resize(matr_a,n);
pro.resize(matr_b,n);
pro.resize(matr_c,n);
cout<<"Введи матрицу а"<<endl;
//cin>>matr_a;

{	cout<<"Введите максимально-возможный элемент в матрице "<<endl;
int el;
cin>>el;

srand((unsigned) clock());
for( int i=0; i<n; i++)
{
for(int k=0; k<n; k++)
{	matr_a[i][k]=(rand() % el) + 1;
matr_b[i][k]= (rand() % el) + 1;
}
}
}
return 0;
}
все нормально компилирует... но при работе выдает ошибку:

ОС Windows инициировала точку останова в matr.exe.

Это может быть вызвано повреждением кучи и указывает на ошибку в matr.exe или в одной из загруженных им DLL.

Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит matr.exe

Выведенное на экран окно содержит дополнительные данные для диагностики ошибки
HEAP[matr.exe]: Heap block at 00346E70 modified at 00346E88 past requested size of 10


в отладке:
Цитата:
"matr.exe": Загружено: "C:\Documents and Settings\Evo\Мои документы\Visual Studio 2010\Projects\matr\Release\matr.exe ", Символы загружены.
"matr.exe": Загружено: "C:\WINDOWS\system32\ntdll.dll" , Невозможно найти или открыть файл PDB
"matr.exe": Загружено: "C:\WINDOWS\system32\kernel32.d ll", Невозможно найти или открыть файл PDB
"matr.exe": Загружено: "C:\WINDOWS\system32\msvcp100.d ll", Символы загружены.
"matr.exe": Загружено: "C:\WINDOWS\system32\msvcr100.d ll", Символы загружены.
HEAP[matr.exe]: Invalid Address specified to RtlFreeHeap( 00340000, 00346FB8 )
т.е. не грузит dll, почему может быть??и в чем проблема?? помогите, уже какой день сижу ночами, никак не пойму((( там есть еще один класс, если нужно могу все прислать..
From Stilet: Нечего лезть в чужие темы!

Последний раз редактировалось Stilet; 20.09.2010 в 09:35.
evoz23 вне форума Ответить с цитированием
Старый 20.09.2010, 19:45   #2
evoz23
Новичок
Джуниор
 
Регистрация: 19.09.2010
Сообщений: 2
По умолчанию

А что по вашему каждый должен создавать новую тему??? тогда их будет немерено, а так хотя бы вопросы на одну тематику.
evoz23 вне форума Ответить с цитированием
Старый 20.09.2010, 19:49   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

evoz23, почитайте правила форума.
много тем или мало не ваша забота.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.09.2010, 10:56   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Цитата:
т.е. не грузит dll, почему может быть??и в чем проблема??
Он грузит ДЛЛ!!! О чем и написал! ЧИТАЙТЕ!

Он не нашел символы для них. О чем и написал, опять же! Символы ставят либосо студией, либо отдельно.
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в классе Superlotles Общие вопросы C/C++ 2 09.07.2010 00:05
конструктор в классе V@mpire Общие вопросы C/C++ 5 01.06.2010 02:04
Удаление в классе! Telec Помощь студентам 1 30.04.2010 18:43
константность в классе softrix Общие вопросы C/C++ 1 17.06.2008 00:21