簡體   English   中英

用向量的向量初始化向量會導致 C++ 中的分段錯誤

[英]Initializing a vector with a vector of vector causes segmentation fault in C++

我正在重新訪問一個舊的回溯項目,該項目旨在解決類似於迷宮中的老鼠的問題,並發現這段代碼由於某種原因導致了分段錯誤。

尤其是隔離線是導致問題的原因。

int makeDecision(vector<int> currPos, vector<vector<int> > board, vector<vector<int> > &visited){

    int M = board.size();
    int N = board[0].size();
    int currX = currPos[0];
    int currY = currPos[1];

    vector<int> prevPos = visited[visited.size()-2];

    int prevX = prevPos[0];
    int prevY = prevPos[1];

我相信這與成為雙向量有關,但我並不完全確定。


這部分是主要的 function,調用 makeDecision() 的決策是一個存儲過去選擇的向量,cPos 代表當前的 position 和訪問是另一個用於檢查代碼位置的向量

void backtracking(vector<vector<int> > board, vector<int> &decisions, vector<int> & cPos, vector<vector<int> > &visited)
{
    int M = board.size();
    int N = board[0].size();
    vector<int> currPos;
    if (cPos[0] == N - 1 && cPos[1] == M - 1)
        cout << "\nYou found the exit :D" << endl; // Base case
    else
    {
        int d = makeDecision(cPos, board, visited);
        decisions.push_back(d);
        backtracking(board, decisions, cPos, visited);
    }
}

最后,這是我的主要 function


    int m;
    cout << "Enter M: ";
    cin >> m;

    int n;
    cout << "Enter N: ";
    cin >> n;

    cout << "\nCreaate board" << endl;
    vector<vector<int> > b = createBoard(m,n);

    cout << "\nPrinting...";
    printBoard(b);

    cout << "Solving..." << endl;

    vector<vector<int> > visited;
    vector<int> decisions = {0,0};
    vector<int> cPos;
    cPos.push_back(0);
    cPos.push_back(0);


    backtracking(b, decisions, cPos, visited);

    return 0;

如果需要,我將使用 g++ 和 C++11 進行編譯

我的代碼的完整版本可在此處獲得

如果問題出在本節中,則有關輸入大小的假設之一很可能不正確。 您可以在執行任何操作之前調用assert來檢查它們。

int makeDecision(vector<int> currPos, vector<vector<int> > board, vector<vector<int> > &visited){
    assert(board.size()>0);
    assert(currPos.size()>1);
    assert(visited.size()>1);
    assert(visited[visited.size()-2].size()>1);

    int M = board.size();
    int N = board[0].size();
    int currX = currPos[0];
    int currY = currPos[1];

    vector<int> prevPos = visited[visited.size()-2];

    int prevX = prevPos[0];
    int prevY = prevPos[1];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM