访问二维矢量时出现分段故障

  • 本文关键字:分段 故障 二维 访问 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矢量。

简单的越界访问。你有一个5x5矩阵,但你正试图获得一个外部元素:

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

这个指数肯定是错的。

编辑2:分段故障似乎已修复

由于这是一个家庭作业问题,我无法在网上发布完整的,因为担心抄袭问题。但是,readCache函数本质上检查地址值是否存在于嵌套向量中。现在,你似乎无法像那样直接进行比较

vec[a][b] = value;

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

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

编辑:这还没有奏效

@PaulMcKenzie关于访问向量的评论帮助我摆脱了分割错误,我开始遇到超出范围的错误,正如他们预测的那样。

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

这是一个家庭作业问题。

最新更新