我正在编写一个程序,其中使用2个一维数组并以其最简化的形式Ax = b生成矩阵。
函数的此部分包含数组A和b。 A是A [n * n],b是b [n]。在本节中,我尝试将两个数组组合在一起,使其看起来像一个实际的矩阵。
该代码有效,但是,如果n大于1023,则在调用main函数时会导致分段错误。我想知道这样做是否有更好的方法。当我尝试使用GDB调试器时,它停在了Y[i][j] = A[k];
行,因此我认为这是需要修复的问题
int linsolve ( int n, double A[], double b[], double x []) {
double Y[n][n+1]; //Creating multidimensional matrix
int k = 0;
// Turns the two one dimensional array into one multidimensional
for (int i=0; i < n; i++){ //iterating row
for (int j=0; j < n; j++){ // per column
Y[i][j] = A[k]; // adding from array A to Y
k++;
}
Y[i][n] = b[i]; // adding from Array b to Y
}
答案 0 :(得分:0)
// Assuming A has n * n elements
int linsolve ( int n, double A[], double b[], double x []) {
double **Y = new double *[n];
for (int i = 0; i < n; i++) {
Y[i] = new double[n + 1];
}
int k = 0;
// Turns the two one dimensional array into one multidimensional
for (int i=0; i < n; i++){ //iterating row
for (int j=0; j < n; j++){ // per column
Y[i][j] = A[k++]; // adding from array A to Y
}
Y[i][n] = b[i]; // adding from Array b to Y
}
// Do something
// Free up Y before returning
for(int i = 0; i < n; i++) {
delete [] Y[i];
}
delete [] Y;
//Return int here
}
答案 1 :(得分:0)
我假设您使用的是Unix / Linux类型的系统。首先输入以下内容找出堆栈大小
Question.prototype.displayQuestion = function() { // lines of code
};
这是堆栈大小(以千字节为单位)。在我的系统上是8Mb。如果您使用1200x1200矩阵,则需要
ulimit -s
这就是程序分段的原因。您正在8Mb堆栈上创建10Mb阵列。问题是,A或b是否也存在于堆栈中?您可能会收到segv,因为要传递的项目是在堆栈上创建的,并且大于分配的堆栈。
要解决此问题,请按照@shirish的建议在堆上创建数组。 @shirish的技术的替代方法是
1200x1201x8 appx 10Mb