当我运行此程序时:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<vector<char> > screen;
char ch = 'a';
unsigned col = 100, row = 100;
if(screen.size() < (unsigned)row)
screen.resize(row);
if(screen[row - 1].size() < (unsigned)col)
screen[row - 1].resize(col);
screen[9][9] = ch;
cout<< "hello";
cout.flush();
}
cout
没有打印任何内容,我收到此错误:
Segmentation Fault (core dumped)
在linux中。程序中有什么问题吗?
如果col
和row
数字较低,则没有问题。
答案 0 :(得分:3)
您正在调整screen
到row
元素的大小,但随后您可以访问其中的元素row
。 C ++中的vector
与数组一样,基于0,因此有效索引为0...row-1
。
同样适用于内部向量和col
。
它适用于较小的数字是一个(不幸的)事故。
答案 1 :(得分:3)
if(screen[row - 1].size() < (unsigned)col)
screen[row - 1].resize(col);
您只在这里调整screen[99]
的大小。 screen[9]
的大小仍为0
,这就是您无法访问screen[9][9]
的原因(但您可以访问screen[99][9]
)。