访问二维向量时的分段错误

时间:2018-12-01 09:16:17

标签: c++

我正在尝试访问二维矢量的特定位置。我声明了向量并对其进行了初始化,并且在将其打印出来时,向量似乎已正确声明。现在,当我尝试从类函数中的if语句访问向量时,出现了分段错误。

class cache{
    vector<vector<int>> v;
    v.resize(5);
    for(z = 0; z < v.size(); z++){
        v[z].resize(5);
    }
    for(x = 0; x < v.size(); x++){
        for(y = 0; y < v[x].size(); y++){
            v[x][y]=5;
        }
    }

    for(x = 0; x < v.size(); x++){
        for(y = 0; y < v[x].size(); y++){
            cout<<v[x][y]<<" ";
        }
        cout<<"\n";
    }
    int readCache(int a){
        int value = a>>15;
        int index = a % (unsigned long)pow(2,15);
        // Do I not try to access using the size?
        for(x = 0; x < v.size(); x++){
            cout<<v[x][index]<<endl;
            // Or do I use this alternate line?
            // cout<<v[index][x]<<endl;
        }        
    }
};

我也找不到正确的错误消息。

向量的大小取决于传递给它的参数。

目前,它是一个1x2048向量。

2 个答案:

答案 0 :(得分:0)

简单的限制访问。您有一个5x5的矩阵,但是您正在尝试将元素移到外部:

    int value = a>>15;
    int index = a % (unsigned long)pow(2,15); // This is also very not efficient

索引绝对是错误的。

答案 1 :(得分:0)

编辑2:细分错误似乎已解决。

由于这是一个家庭作业问题,由于担心抄袭问题,我无法在网上发布完整的问题。 但是,readCache函数实际上检查嵌套向量中是否存在地址值。现在,看来您无法像这样直接比较

vec[a][b] = value;

当我将所需位置的值分配给一个临时变量然后与给定值进行比较时,它起作用了。像这样:

int temp = vec[a][b];
if(temp == value){
    // do something
}

编辑:这还行不通。

@PaulMcKenzie关于访问向量的评论帮助我摆脱了分割错误,并且开始遇到超出预期的错误范围。

然后,在readCache函数中,我传递了一个32位的位集来访问缓存。但是我实际上并不需要访问高速缓存块中的数据字节,因此模数有3个我不需要的额外位。模数函数的范围是0到(值-1),因此在某些时候它将超过向量的大小。

这是一个作业问题。