我有一个类应该生成一个int矢量(在0-1的范围内),我想用它作为一个地图(称为矩阵)。
class generator
{
public:
void draw(void);
void iterate(void);
generator();
~generator();
private:
vector<vector<int>> matrix;
};
在构造函数中,我想用随机数据填充矩阵:
vector<vector<int>> matrix(height, vector<int>(width));
for (int i = 0; i < height; i++){
for (int j = 0; j < width; j++) {
matrix[i][j] = rand() % 2;
}
}
但是我得到了一次违规阅读。 感谢您的时间和精力。
弃用更新: 我尝试使用成员函数.data()来检索指向数据的指针并直接访问它
ptr = matrix[i][j].data();
*ptr = rand() % 2;
但结果没有区别。我相信这不是关于我如何访问矢量,而是我如何设置它。
更新2:
下面提供的校正确实导致向量按预期填充。在尝试
时cout << matrix[i][j];
在draw成员函数中,我再次获得了read-acess-violation。
更新3:
正如所建议的,我检查了这个错误发生的时间。它发生在第一次尝试时打印出矩阵[0] [0]的第一个整数。返回的值是0x8。重要提示:如果没有用常量matrix.size()替换,则会导致错误。
更新4:
这基本上是我的画()
void generator::draw() {
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix[i].size(); j++) {
cout << matrix[i][j];
}
cout << endl;
}
}
原始来源已更新,以反映当前的来源。
更新4: 稍微剪切http://pastebin.com/83vrDJWZ
的源代码更新5: 我的一个更简单的错误已在评论中得到解决。问题很严重。谢谢大家。
答案 0 :(得分:1)
由于以下原因,问题看起来是无效的指针:
vector<vector<int>*> matrix;
你有一个指向int向量的指针向量,但你从未真正分配内部元素。
改为使用:
vector<vector<int>> matrix;
在初始化步骤中:
matrix[i].resize(width); // instead of: matrix[i]->resize(width);
实际上,您可以稍微简化一下:
std::vector<std::vector<int>> matrix(height, std::vector<int>(width));
但仍需要迭代来填充数据。