实现动态矩阵类的错误
Errors implementing a dynamic matrix class
好了,我现在正试图实现一个简单的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"answers"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 << "nn";
}
cout << "nnn";
Coord temp;
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 5; j++) {
temp = adabo(i, j);
temp.print();
cout << "; ";
}
cout << "nn";
}
return 0;
}
编辑:这与Coord无关,只是用dyMatrix of int和static matrix of int进行了测试,但是在[5][0]之后崩溃了
在您的第一个示例中,您声明了inakos[5][7]
,因此索引范围从0到4和0到6。inakos[5][0]
和inakos[5][1]
可能因此崩溃。
在第二个示例中,再次声明inakos[5][7]
,但让第一个索引从0循环到6。inakos[i][j]
再次崩溃。一种解决方法是切换索引(即更改为i<adabo.getWidth()
和j<adabo.getHeight()
)。
相关文章:
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 动态类的分段错误(家庭作业问题)
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 释放动态内存时C++错误
- 从 C 可执行文件加载动态库时收到错误C++"undefined symbol"
- 使用动态数组时C++逻辑错误
- 类动态数组错误
- 尝试从动态分配的二维数组 C++ 中读取值时出现分段错误,并在尝试删除它时给出 munmap_chunk():
- 寻找最小楼梯成本的动态规划问题的错误答案
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 动态 2D 阵列.为什么分段错误?
- 动态内存分配错误
- JNI 不满意链接错误: 动态链接库 (DLL) 初始化例程失败
- 导致堆缓冲区错误的动态分配数组的析构函数
- 如何修复访问动态数组中结构中的字符串变量时"segmentation fault (core dumped)"错误
- 删除动态数组会导致运行时错误
- 使用动态数组对算法编译器错误进行排序
- 我正在尝试使用回溯来解决 N queen 问题,但在编译时它会给出运行时错误(动态堆栈缓冲区溢出)
- 导入错误:动态模块未定义初始化函数
- 分割错误c++动态数组