[英]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.