У меня есть следующий класс:Динамический массив коррупции кучи
template <typename T>
class matrix
{
private:
int _n;
T* array;
public:
matrix(): _n(0)
{
array = new T[_n * _n];
}
matrix(int n): _n(n)
{
if(n < 0)
throw "Invalid array size!";
array = new T[_n * _n];
}
~matrix()
{
delete[] array;
}
void Set(const int x, const int y,const T val)
{
if((x<0 || x>_n) && (y<0 || y>_n))
throw "Invalid index";
array[x*_n + y] = val;
}
T& Get(const int x, const int y)
{
if((x<0 || x>_n) && (y<0 || y>_n))
throw "Invalid index";
return array[x*_n + y];
}
};
и использовать его таким образом:
matrix<int> k(5);
k.Set(5,5,6);
cout<<k.Get(5,5);
Проблема в том, я получаю ошибку коррупции кучи при вызове Set. Что я делаю неправильно? (думаю, именно так я могу получить доступ к элементам массива)
Обратите внимание, что ваш конструктор по умолчанию вызывает массив 'new' с размером 0. Указатель, возвращенный этим вызовом, практически бесполезен, так как разыменование является неопределенным поведением. – jrok