我有一个向量向量,按以下方式构建:
std::vector<std::vector<int>> symbols;
我想在结构中插入一些 int。为此,我想检查插入 int 的位置是否合法。我试图让矢量以动态的方式成长。 出于这个原因,我编写了以下代码:
void checkIndex(unsigned int i0, unsigned int i1) {
int mult_fac=2;
if(i0>=symbols.capacity()-1){
symbols.reserve((i0+1)*mult_fac);
}
if(i1>=symbols[i0].capacity()-1){
symbols[i0].reserve((i1 + 1)*mult_fac);
}
}
为了验证所有这些是否有效,我编写了一个 main:
int main() {
for(;;){
int i=rand()%1000;
int j=rand()%1000;
checkIndex(i,j);
}
return 0;}
但是,输出显示错误的内存访问:
"进程已完成,退出代码 -1073741819 (0xC0000005)">
我正在使用 Windows 10。 我不明白如何解决它! 谢谢你帮助我。
明显的问题是capacity()
没有告诉你向量的大小,你需要size()
,reserve()
不会改变向量的大小,而是需要resize()
。
最后你的测试太悲观了,在改变caapcity
之后size
你可以拥有
if (i0 >= symbols.size()) {
和
if (i1 >= symbols[i0].size()) {
您不需要其中的-1
,如果索引>=大小,则索引无效。