2015-09-24 61 views
0

新增至C++。尝试调试代码时,我收到“超出范围”的错误消息。我试图使用resize(),但它仍然没有修复。代码是将指令读入2d矢量并打印出图形。 我在做什么错?C++错误:向量下标超出范围,行1201

#include<iostream> 
#include<fstream> 
#include<vector> 
#include<string> 
#include<sstream> 

using namespace std; 

typedef struct Pattern{ 
    int rowNum; 
    int colNum; 
    char token; 
    bool isTriangular; 
    bool isOuter; 
}Pattern; 

void CommandProcessing(vector<string>&, Pattern&); 
void Builder(Pattern&, vector<vector<char>>&); 
void Printer(vector<vector<char>>&); 

int main() 
{ 
    Pattern characters; 
    vector<vector<char>> key; 

    characters.colNum = 3; 
    characters.rowNum = 3; 
    characters.token = '@'; 
    characters.isOuter = false; 
    characters.isTriangular = false; 

    Builder(characters, key); 
    Printer(key); 
} 

void Builder(Pattern& character, vector<vector<char>>& matrix) 
{ 
    int i = 0, j = 0; 
    char c; 

    if (character.token == 0) 
     c = 'a'; 
    else 
     c = character.token; 

    matrix.resize(character.rowNum); 
    for (int i = 0; i < character.rowNum; i++){ 
     if (character.isTriangular) 
      matrix[i].resize(i + 1); 
     else 
      matrix[i].resize(character.colNum); 

     if (character.isOuter) 
     { 
      if (character.isTriangular) 
      { 
       if (i = j) 
        matrix[i][j] = c; 
       else 
        matrix[character.rowNum - 1][i] = matrix[i][0] = c; 
      } 
      else 
       matrix[0][j] = matrix[i][0] = matrix[character.rowNum - 1][j] = matrix[i][character.colNum - 1] = c; 
      i++; 
      j++; 
     } 

     else 
     { 
      if (character.isOuter) 
      { 
       while (i <= j){ 
        for (i = 0; i < character.rowNum; i++) 
         for (j = 0; i < character.colNum; j++) 
          matrix[i][j] = c; 
       } 
      } 
      else 
       for (i = 0; i < character.rowNum; i++) 
        for (j = 0; i < character.colNum; j++) 
         matrix[i][j] = c; 
     } 
     c++; 
    } 

} 
void Printer(vector<vector<char>>& print) 
{ 
    for (int i = 0; i < print.size(); i++){ 
     for (int j = 0; j < print[i].size(); j++) 
     { 
      cout << print[i][j] << endl; 
     } 
    } 
} 
+1

让步标题行的数目无标记的地方是在你的代码的发布是无用的(幸运的是,你不要张贴1200+线)... – Jarod42

+0

@ Jarod42我不知道它为什么说线1201,这是我所有的线 –

+0

它应该是在向量标题线...顺便说一句,与调试器,你应该知道并突出你的代码哪一行有问题。 – Jarod42

回答

1

if (i = j)应该是if (i == j)

if (i = j)做一个任务和测试是否i != 0

其他问题:

while (i <= j){ 
    for (i = 0; i < character.rowNum; i++) 
     for (j = 0; i < character.colNum; j++) // You test `i` instead of j 
      matrix[i][j] = c; 
    // Once test fixed 
    // Here `i == character.rowNum` and `j == character.colNum` (if `character.rowNum != 0`) 
    // So the while loop condition doesn't change and may so do infinite loop 
} 
+0

刚刚发布的问题是在'for(j = 0; i YePhIcK

+0

我已经修复了测试,但我仍然不明白'如果character.rowNum!= 0'部分 –

+0

简而言之,我说'while(i <= j)'应该被移除(或者内部的逻辑应该被改变)。 – Jarod42