在C ++中以2D数组输入输入时出现分段错误

时间:2018-06-21 08:16:56

标签: c++ segmentation-fault

每当我尝试读取输入错误时,计算机都会出现分段错误。我的输入如下:

<form id="checkGroup">
  <input type="checkbox" name="whatever" value="1" class="required_group" />
  <input type="checkbox" name="whatever" value="2" class="required_group" />
  <input type="checkbox" name="whatever" value="3" class="required_group" />
  <input type="checkbox" name="whatever" value="4" class="required_group" />
  <button name="submit">Submit</button>
</form>

基本上,我想将上述输入直接存储到2D数组中。第一列是X坐标,第二列是Y坐标,最后是存储在2D数组的(X,Y)COORDINATE中的值。

7
1 2 3
2 3 1
1 4 4
4 6 7
7 5 2
3 5 1
4 5 5

2 个答案:

答案 0 :(得分:0)

就像提到的rustyx一样,此错误可能是堆栈溢出的结果。

最简单的方法是减小数组的大小或使用其他数据结构来动态分配内存,例如std::vectorstd::liststd::map

在您的示例中,它看起来好像大多数数组都是空的。在这种情况下,我建议使用std::map。 在此问题中讨论了有关内存使用的其他一些优化:Any optimization for random access on a very big array when the value in 95% of cases is either 0 or 1?

答案 1 :(得分:0)

C ++的类型系统中没有动态调整大小的数组,因此您需要将其更改为诸如std :: vector之类的东西。另一个问题是,即使您的编译器支持动态大小的数组,您仍然会发生堆栈溢出(至少很有可能)。因此,我建议您将功能更改为以下形式:

long leastTimeToInterview(int n, int k, int m) {
    std::vector<std::vector<int>> a(m + 1, std::vector<int>(m + 1));
    int i = 0, x = 0, y = 0;

    for(i = 1; i <= m; i++) {
        scanf("%d %d", &x, &y);
        scanf("%d", &a[x][y]);
        a[y][x] = a[x][y];
    }
    return 11;
}

您的应用程序逻辑中可能仍然存在错误,但是您的示例和说明没有提供足够的信息来说明这一点。