Я предполагаю, что вы используете систему типов Unix / Linux.Сначала узнайте размер стека, набрав
ulimit -s
Это размер стека в килобайтах.В моей системе это 8 МБ.Если у вас матрица 1200x1200, для этого потребуется
1200x1201x8 appx 10Mb
Именно поэтому программа segvs.Вы создаете массив 10 МБ в стеке 8 МБ.Вопрос в том, живут ли A или b в стеке?Возможно, вы получаете segv, потому что элемент, через который вы проходите, был создан в стеке и больше выделенного стека.
Чтобы решить эту проблему, создайте массив в куче, как предложил @shirish.Альтернативой технике @ shirish будет
int linsolve ( int n, double A[], double b[], double x []) {
double **Y = new double *[n];
double *Ybody = new double[n * (n + 1)];
for (int i = 0; i < n; i++) {
Y[i] = &Ybody[i * (n + 1)];
}
// Turns the two one dimensional array into one multidimensional
int k = 0
for (int i=0; i < n; i++){
for (int j=0; j < n; j++){
Y[i][j] = A[k++];
}
Y[i][n] = b[i];
}
// Do something
// Free up Y before returning
delete [] Y;
delete [] Ybody;
}