我有下面的类:动态数组堆损坏
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);
问题是调用设置时,我得到一个堆损坏错误。 我在做什么错? (我的猜测是这是我访问他们的数组元素的方式)
还请注意,您的默认构造函数调用数组'new'大小为0,该调用返回的指针是因为解引用它是未定义的行为实际上是无用的。 – jrok 2012-04-07 16:58:40