引用更改大小的向量时出现分段错误

Segmentation Fault when refrencing vectors that changed size

所以我在主函数中初始化了一个向量,然后将该向量作为引用传递给一个大小发生变化的函数。现在,我可以想象 main 中的初始化向量的大小会发生变化,但事实并非如此。我只是错误地实施了这个吗?

#include <iostream>
#include <vector>
using std::vector;

void createImage(vector<vector<char> >& img){
    int cols, rows;
    std::cin >> rows >> cols;
    img.clear();
    for(int i = 0; i < rows; i++)
        img.push_back(vector<char>(cols, 'O'));
}

void colorPixel(vector<vector<char> > &img){
    int xCoord, yCoord;
    char color;
    std::cin >> xCoord >> yCoord >> color;
    img[xCoord][yCoord] = color;
}

void printVector(vector<vector<char> > &img){
        for(int i = 0; i < img.size(); i++){
            for(int j = 0; j < img[i].size(); j++)
                std::cout << img[i][j];
            std::cout << '\n';
        }
}

int main(){

    char operation;
    
    while(std::cin >> operation){
        vector<vector<char> > myVector;
        if(operation == 'X')
            break;
        if(operation == 'I')
            createImage(myVector);
        if(operation == 'C')
            printVector(myVector);
        if(operation == 'L')
            colorPixel(myVector);
    }
}

编辑: 这就是正在发生的事情。当您创建矢量时,调用 createImage() 的 I 5 5 有效,但是当您在 myVector[4][4].

调用 colorPixel() 的 L 4 4 P 时,它开始失败

如果我将 main 中的 myVector 初始化为 250 250,那么 print 将打印所有 250 行,即使在 createImage() 中更改大小(例如 4 4)之后也是如此。

简而言之,我相信并且确定知道 main 中的向量没有得到其大小已更改的提示,是否有任何解决方法?

    while(std::cin >> operation){
        vector<vector<char> > myVector;

在此 while 循环中发生的第一件事是创建了一个新的 myVector。从字面上看,这就是 C++ 中的意思。

当到达循环末尾时,这个 myVector 被销毁。这就是 C++ 的工作原理:如果您在循环中或在 if 语句中声明一个对象,则当执行到达此范围的末尾时该对象将被销毁。

因此,当此 while 循环到达此终点时,此 myVector 将被销毁。它不再存在。它会消失的。它会容易存在。它将渴望峡湾。它将变成 ex-myVector.

然后,再次检查 while 循环的条件,如果条件仍然成立,则执行再次进入 while,从头开始创建一个新的 myVector。它与之前的 myVector 没有任何关系,这只是一个模糊的记忆。

解决这个问题的方法是在这个循环之前声明这个myVector这个循环,在你的main,所以这个 myVector 只有在 main 本身完成执行时才会被销毁。