调整矢量大小时的运行时错误

时间:2013-09-08 21:51:49

标签: c++ linux vector console-application

当我运行此程序时:

#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中。程序中有什么问题吗?

如果colrow数字较低,则没有问题。

2 个答案:

答案 0 :(得分:3)

您正在调整screenrow元素的大小,但随后您可以访问其中的元素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])。