我正在尝试访问二维矢量的特定位置。我声明了向量并对其进行了初始化,并且在将其打印出来时,向量似乎已正确声明。现在,当我尝试从类函数中的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向量。
答案 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),因此在某些时候它将超过向量的大小。
这是一个作业问题。