【发布时间】: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