我有以下类(class):
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 时遇到堆损坏错误。 我究竟做错了什么? (我猜这是我访问数组元素的方式)
最佳答案
可以在索引 0-4 处访问 5 元素数组。您为 x
和 y
传递 5,这会导致访问 array
时索引无效。
关于c++ - 动态数组堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10056390/