好吧,我正試圖實現一個簡單的2D矩陣類。這是什麼樣子至今:實現動態矩陣類的錯誤
template <typename Type>
class dyMatrix {
private:
Type *mat;
int width, height;
int length;
public:
dyMatrix (int _width, int _height)
: width(_width), height(_height), mat(0)
{
length = width * height;
mat = new Type[length];
};
// ---
int getWidth() {
return width;
};
int getHeight() {
return height;
};
int getLength() {
return length;
}
// ---
Type& operator() (int i, int j) {
return mat[j * width + i];
};
Type& operator() (int i) {
return mat[i];
};
// ---
~dyMatrix() {
delete[] mat;
};
};
爲了測試它,並與靜態多維數組比較,我寫了下面的代碼片段:
#include <iostream>
using namespace std;
/* matrix class goes here */
struct Coord {
int x, y;
Coord()
: x(0), y(0)
{};
Coord (int _x, int _y)
: x(_x), y(_y)
{};
void print() {
cout << x << ", " << y;
};
};
int main() {
dyMatrix<Coord> adabo(5, 7);
Coord inakos[5][7];
int i = 5, j = 0;
adabo(i, j) = *(new Coord(i, j));
inakos[i][j] = *(new Coord(i, j));
inakos[i][j].print();
adabo(i, j).print();
return 0;
}
「Adabo」和「Inakos 「是任意選擇的名字。執行後,inakos
將打印其內容,但程序在adabo
可以執行任何操作之前崩潰。另一個有趣的事情是,如果我分別給出i
和j
以外的值5和0,分別如5和1,它可以正常工作。
我不知道確切的數字是什麼工作,哪些使得程序出現故障,我只知道這裏存在不規則性。我可能做錯了什麼?我是C++的業餘愛好者,所以我可能會或不會在任何結構中濫用某些東西。
如果有人也有時間,我非常想知道在我的矩陣類中是否有任何其他通知錯誤。任何不可能與問題有關的事情,但卻是一個謬論。
我也用下面的main()來測試它,但是它在inakos
打印[5] [1]中的內容後仍然崩潰。也許它不必與dyMatrix,但鬆散實施的Coord?
int main() {
dyMatrix<Coord> adabo(5, 7);
Coord inakos[5][7];
for (int i = 0; i < adabo.getHeight(); i++) {
for (int j = 0; j < adabo.getWidth(); j++) {
adabo(i, j) = *(new Coord(i, j));
inakos[i][j] = *(new Coord(i, j));
inakos[i][j].print();
cout << "; ";
}
cout << "\n\n";
}
cout << "\n\n\n";
Coord temp;
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 5; j++) {
temp = adabo(i, j);
temp.print();
cout << "; ";
}
cout << "\n\n";
}
return 0;
}
編輯:它與Coord沒有關係。剛剛用一個int型的dyMatrix和一個int型靜態矩陣進行了測試,然後在[5] [0]之後崩潰了。
我鼓勵你花時間學習使用調試器。這將爲自己付出很多。 – NPE 2013-03-02 15:18:01
@NPE是的,我可以試試。 Code :: Blocks的調試器不是很直觀,但是,嘿它在那裏。 – Mutoh 2013-03-02 15:21:57