使用向量的向量分段故障



所以我在下面有我的代码。我正在拼接矩阵/或 pgm 图像。通过面板,我的意思是在一定数量的列和行中重复自己。 它看起来像其中一个窗户,窗格全部分隔每个玻璃部分。

举个例子:http://1.bp.blogspot.com/_OLskT-GO5VE/TGqgrSX_o_I/AAAAAAAAA-4/vcCdn6hA3fI/s320/2007_12_warhol_cambell_soup.jpg 这是一个 4x8 的汤罐矩阵(它本身就是一个巨大的像素矩阵。

我相信段错误发生在涉及 index=k 的地方,但我找不到任何问题。 我正在重新调整矩阵的大小,所以不应该是这样。

编辑:修复示例。

void panel(vector <VecofInts> &p, int inputRow, int inputColumn)
{
    int i, j, v = 1, g = 1, k = 0, row, col;
    row = p.size();//obtaining the original rows
    col = p[0].size();//obtaining the original columns
    p.resize((r * row)); //sets up the new matrix so I can add new elements.
 /* This is my first test loop for the columns; I know I can create a single loop
 for rows and columns but this will help me find problems more easily */
    while(v < c){
        ...
    }
/* this is the loop I'm having trouble with */
    v=1;
    while(v < c){
        k = row;
        while(g < r){
            for(i = 0; i < row; i++){
                k = k + i;
                for(j = 0; j < col; j++){
                    p[k].push_back(p[i][j]);
                }
            }
            g++;
            k++; //this allows the g<r loop to continue and k not repeat itself
                   //in the first i loop again.
        }
        v++;
    }
}

从你的例子来看,你不太清楚你的意图是什么。
顺便说一下,我建议采用以下通用方法:

typedef std::vector<int> VecofInts;
typedef std::vector<VecofInts> Matrix;
typedef std::vector<int>::iterator RowIterator;
void panel(const Matrix& m, int inputRow, int inputColumn) {
    const int column = m.size(); /* Number of column, each colum is a vec of int */
    RowIterator it;
    for(int i=0; i != column; i++) {
       it = m[i].begin();
       /* m[i] represent a row on your matrix */
       for(; it != m[i].end; it++) {
          ...
       }
    }
}

当你在for循环中使用k = k + i时,你会得到k = 0,1,3,6,10,15...

我想你的目的k++

编辑:

请参阅评论以获取k = k + i

while(v < c){
    k = row;
    while(g < r){
        for(i = 0; i < row; i++){
            k = k + i; // ####### k = (row), (row+1), (row+3), (row+6), (row+10),(row+15)....
            for(j = 0; j < col; j++){
                p[k].push_back(p[i][j]);
            }
        }
        g++;
        k++; //this allows the g<r loop to continue and k not repeat itself
               //in the first i loop again.
    }

相关内容

  • 没有找到相关文章

最新更新