【问题标题】:run-time error when resizing vector调整向量大小时的运行时错误
【发布时间】:2013-09-12 09:31:17
【问题描述】:

当我运行这个程序时:

#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 的数字较小,则没有问题。

【问题讨论】:

  • 零索引。一个 100x100 的向量有 100 个元素,从 0 到 99。

标签: c++ linux vector console-application


【解决方案1】:
if(screen[row - 1].size() < (unsigned)col)
    screen[row - 1].resize(col);

您只是在此处调整 screen[99] 的大小。 screen[9] 的大小仍然为 0,这就是为什么您无法访问 screen[9][9](但是您可以访问 screen[99][9])。

【讨论】:

  • 是的。谢谢。这是一个大型程序的简短摘录,我应该再次检查。
【解决方案2】:

您正在将 screen 的大小调整为 row 元素,但随后您访问了其中的元素 row。 C++ 中的vectors 和数组一样,都是从 0 开始的,所以有效的索引是 0...row-1

内部向量和col也是如此。

它适用于较小的数字的事实是(不幸的)不幸。

【讨论】:

  • 我在发布之前更改了索引。现在问题修复了,问题没有解决。
猜你喜欢
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
相关资源
最近更新 更多