C++ 分段故障(堆芯转储)-对于具有多维向量C+的循环+;98

C++ 分段故障(堆芯转储)-对于具有多维向量C+的循环+;98,c++,vector,segmentation-fault,c++98,C++,Vector,Segmentation Fault,C++98,当我试图在Ubuntu 14.04终端上运行这个程序时,我遇到了一个分段错误(内核转储)。它被正确编译,但当我运行程序时,它给了我一个分段错误(内核转储)。我知道问题出在嵌套的for循环块上,因为当我移除该部分时 for(int i = 0; i < 500; i++){ for(int j = 0; j < 500; j++){ map[i][j] = "unknown"; } } for(int i=0;i

当我试图在Ubuntu 14.04终端上运行这个程序时,我遇到了一个分段错误(内核转储)。它被正确编译,但当我运行程序时,它给了我一个分段错误(内核转储)。我知道问题出在嵌套的for循环块上,因为当我移除该部分时

for(int i = 0; i < 500; i++){
   for(int j = 0; j < 500; j++){
     map[i][j] = "unknown";
   } 
 }
for(int i=0;i<500;i++){
对于(int j=0;j<500;j++){
map[i][j]=“未知”;
} 
}
这个程序运行得很好,但是如果我包含上面的代码块,它就不会运行了。以下是正在进行的整个计划:

#include<iostream>
#include<string>
#include <stdlib.h>
#include <vector>
#include <iomanip>

using namespace std;

int moves = 0;
string input;
vector< vector<string> > map;

int main(int argc, char **argv) {

 for(int i = 0; i< 500; i++){
   for(int j = 0; j< 500; j++){
   map[i][j] = "unknown";
   } 
 }

  while ( 1 ) {
    getline(cin, input); 
    cout << "#"<< input[0] << endl; 
    cout << "#"<< input[2] << endl;
    cout << "#"<< input[4] << endl;
    cout << "#"<< input[6] << endl;
    cout << "#"<< input[8] << endl;

    cout << "forward" << endl;

  }

  for(int i = 0; i< map.size(); i++){
    for (int j = 0; j < map.size(); j++){
      cout << "#" << map[i][i] << endl;
    }
  }
  return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int=0;
字符串输入;
向量<向量>地图;
int main(int argc,字符**argv){
对于(int i=0;i<500;i++){
对于(int j=0;j<500;j++){
map[i][j]=“未知”;
} 
}
而(1){
getline(cin,输入);
无法您的代码片段

for(int i = 0; i < 500; i++){
   for(int j = 0; j < 500; j++){
     map[i][j] = "unknown";
   } 
 }
for(int i=0;i<500;i++){
对于(int j=0;j<500;j++){
map[i][j]=“未知”;
} 
}
尝试访问向量中不存在的元素。访问向量外部的元素不会自动创建它们(与映射不同)


使用
vector::push_back
插入元素,或者在循环之前调用
vector::resize

除了答案,还要了解std名称空间中已经定义了“map”。它是标准容器之一。您所做的与listvector类似;感谢tipaye,这非常有帮助!