写二维向量时的访问冲突

Access violation when writing two dimensional vectors

本文关键字:向量 访问冲突 二维      更新时间:2023-10-16

我的程序继续崩溃时,x = 2y = 6 cellChargeTime[x][y].push_back(0);任何想法如何解决这个问题或什么可能导致这个崩溃。

vector<int> **cellChargeTime;
cellChargeTime = new vector<int>*[xMax]; //xMax = 40
for (int x=0; x<xMax; x++)
    cellChargeTime[x] = new vector<int> [yMax]; //yMax = 40
for (int x=0; x<xMax; x++){
    for (int y=0; y<yMax; y++){
        for (int i=0; i< numRuns; i++){ //numRuns = 1
            cellChargeTime[x][y].push_back(0); // Crashes at x = 2; y = 6
        }
    }
}

所示的代码没有问题,它工作得很好(如果您在使用cellChargeTime时有足够的delete[]语句)。

但是,我建议使用一种不同的内存管理方法:

vector<vector<int> > cellChargeTime;
cellChargeTime.resize(xMax);
for (int x=0; x<xMax; x++)
    cellChargeTime[x].resize(yMax);

填充向量的循环完全没有改变:

for (int x=0; x<xMax; x++){
    for (int y=0; y<yMax; y++){
        for (int i=0; i< numRuns; i++){ //numRuns = 1
            cellChargeTime[x][y].push_back(0);
        }
    }
}