使用来自控制台的输入来初始化列表的 Seg 错误向量

Posted

技术标签:

【中文标题】使用来自控制台的输入来初始化列表的 Seg 错误向量【英文标题】:Seg fault initializing vector of lists with input from console 【发布时间】:2015-01-10 07:12:03 【问题描述】:

我一直致力于解决涉及树的问题。我的策略是获取输入并将图形表示为邻接列表。不幸的是,我遇到了分段错误,无法弄清楚我在这里做错了什么。

int main() 
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */

    int N;
    cin >> N;
    int M; 
    cin >> M;

    // matrix of adjacency list to hold node values
    vector<list<int> > adjList(M, list<int>());

    // create adjacency list
    int ui, vi;
    while(true) 
      cin >> ui;
      cin >> vi;
      ui--;
      vi--;

      adjList[ui].push_front(vi);
      adjList[vi].push_back(ui);

    

return 0;

当我运行程序并输入此输入时,它会因分段错误而停止运行。

10 9
2 1
3 1
4 3
5 2
6 1
7 2
8 6
9 8
10 8

注意:第一行不是图形的一部分,它定义了图形的约束。所以这个总共有 10 个顶点和 9 条边。

【问题讨论】:

【参考方案1】:

你的向量有M=9 元素。这些编号从 0 到 8,并且您的代码正在尝试访问索引 9 处的元素(最后一行中的 10 减一)。

【讨论】:

哇,我可以发誓我在发帖之前看过这个。现在可以了,谢谢!

以上是关于使用来自控制台的输入来初始化列表的 Seg 错误向量的主要内容,如果未能解决你的问题,请参考以下文章

seg:NLP之前向最大匹配分词

memcpy() 给我段错误

wininet ftp程序遇到seg错误

如何使用来自另一个视图控制器swift的用户输入创建具有表视图单元格的列表

PHP 扩展中的 SEG 错误

500,000 个已排序整数数组上的 C++ 快速排序算法中的 Seg 错误