当我尝试为此向量矢量赋值时,我一直遇到分段错误。我基本上是从图像中读取像素,然后尝试创建矢量矢量,您可以访问该行,然后访问该行上的像素以获取该点中的像素。但是当我尝试将特定像素分配给像素值时,它会给我一个分段错误。我使用{255,255,255}的占位符作为示例像素,但我打算使用这个 - > PIX [num_pix] .r()如果我可以使它工作,这基本上是我的Image类中的像素getter,其中num_pix是它迭代的当前像素。
vector<vector<Pixel>> Image::as_rows(){
vector<vector<Pixel>> pixels;
int i,k,height, width,pix_num;
pix_num=0;
height = this->HDR.height();
width = this->HDR.width();
for(i=0;i<height;i++){
for(k=0;k<width;k++){
pix_num++;
pixels[i][k] = {255,255,255};
}
}
return pixels;
}
答案 0 :(得分:2)
您的向量当前为空,这意味着当您尝试分配给您不拥有的内存(使用pixels[i][k] = {255, 255, 255}
)时,您将有未定义的行为。
您可以在声明对象时使用正确数量的对象初始化矢量:
vector<vector<Pixel>> pixels(height, vector<Pixel>(width));
此外,对于将来,您可以使用.at()
而不是下标运算符来强制执行边界检查并避免使用UB。
答案 1 :(得分:0)
您有一个您尝试访问的空向量,这是未定义的行为。您必须先分配元素,然后才能通过索引访问它们,就像您尝试做的那样。在开始时使用正确数量的对象初始化矢量的替代方法是在需要时push_back
对象。使用Pixel
对象的向量向量,您将需要填充此类内容。
std::vector<std::vector <Pixel> > pixels;
for(i=0;i<height;i++)
{
pixels.push_back(std::vector<Pixel>());
for(k=0;k<width;k++)
{
pix_num++;
pixels[i].push_back({255,255,255});
}
}
答案 2 :(得分:0)
您的问题是pixels
是一个空向量。它的元素是vector<Pixel>
- 但它没有任何元素。廉价而愉快的解决方案是首先计算height
和width
,然后使用足够大小的元素构建pixels
:
const int height = this->HDR.height();
const int width = this->HDR.width();
std::vector<std::vector<Pixel>> pixels(height, {width, {0,0,0}});
然而,这将具有可怕的内存位置属性。我强烈建议你写一个Bitmap
类,它将x,y映射到单个向量中的偏移量,并用宽度和高度构造。