【问题标题】:Segmentation fault 11: while trying to input B[1] using cin分段错误 11:尝试使用 cin 输入 B[1] 时
【发布时间】:2018-08-25 07:41:09
【问题描述】:

我在运行以下代码时遇到问题。它给我一个分段错误作为运行时错误。

#include <iostream>
using namespace std;

int main()
{
    int n;
    cout << "Enter n: ";
    cin >> n;

    float A[n][n], x[n], B[n], L[n][n], U[n][n], m[n][n], Aug[n][n + 1];

    //Initializing matrix A,L,U
    cout << "Enter A: \n";
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> A[i][j];
            U[i][j] = A[i][j];
            Aug[i][j] = A[i][j];
            if (i == j) {
                L[i][j] = 1;
            }
            else {
                L[i][j] = 0;
            }
        }
    }

    //Initialising matrix B
    cout << "Enter B: \n";
    for (int i = 0; i < n; i++) {
        cin >> B[i];
        cout << "done" << i;
        Aug[i][n] = B[i];
    }

    // ...

    return 0;
}

输入:

n=2, A={2,5,-3,-4}, B={0,0}

当我尝试输入 B[1] 时出现错误,因此 done0 会被打印,但 done1 不会。我只是无法弄清楚这个错误的原因是什么,因为我看不出有任何理由让B[1] 无法访问。

【问题讨论】:

  • 你的编译器是什么?
  • @Azeem 我尝试在终端(Mac)和 Codechef 的在线 IDE 上编译它
  • 在 Mac 上使用 GCC 或 Clang?
  • @OsheenSachdev “gcc 确实支持 VLA,所以问题出在哪里?” 大数组很容易溢出堆栈。
  • “有什么问题”。好吧,如果您使用标准 C++,那么无法访问 gcc 的人可以帮助您解决这个问题。没有正当理由使用非标准代码是不好的。

标签: c++ arrays segmentation-fault variable-length-array


【解决方案1】:

您误诊了问题。分段错误发生在for 循环完成后,在您没有向我们展示的代码中(// ... 部分)。 done1 不会被打印,因为您的代码在有机会刷新输出缓冲区之前出现故障。你的cout &lt;&lt; "done" &lt;&lt; i; 只是把东西放在输出缓冲区中,没有东西可以刷新缓冲区。

【讨论】:

  • 是的,打败我。
  • 哦,好的,非常感谢。我将尝试自己调试 //... 部分并更新问题,以防我仍然无法识别错误。
猜你喜欢
  • 2018-10-30
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 2017-01-29
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
相关资源
最近更新 更多