高斯消除C ++分段错误

时间:2014-12-16 10:28:44

标签: c++ matrix segmentation-fault gaussian

我真的坚持使用C ++中的高斯消除代码,我需要返回上三角矩阵但仍然只有我得到的是分段错误。我知道必须有一些分配的内存,但我无法找到。

代码:

#include <iostream>

using namespace std;

double ** allocateDynamicArray(int order){
    double ** dynArray = new double *[order];
    int cols = order+1;
    double *pool = new double [order * cols];
    for(int i = 0;i < order; i++, pool += cols){
           dynArray[i] = pool;
    }
    return dynArray;
}

void deallocateDynamicArray(double **dynArray){
    delete [] dynArray[0];
        delete [] dynArray;
}

void addAndPrintArray(double **dynArray, int order){
    cout << "Zadejte prvky pole radu " << order << endl;
    for(int i=0; i< order; i++){
        for(int j=0; j< order+1; j++){
            cout << "Pole[" << i << "][" << j << "]: ";
            cin >> dynArray[i][j];
        }
    }

    for(int i=0; i< order; i++){
        for(int j=0; j< order+1; j++){

            if(dynArray[i][j] < 10 && dynArray[i][j] >= 0){
                cout << " ";
            }
            cout << dynArray[i][j] << " ";
        }
        cout << endl;
    }
}

double ** gaussElimination(double** dynArray, int order){
    for(int j=1; j<=order; j++) /*Horni trojuhelnikova matice*/
    {
        for(int i=1; i<=order; i++)
        {
            if(i>j)
            {
                double c=dynArray[i][j]/dynArray[j][j];

                for(int k=1; k<=order+1; k++)
                {
                    dynArray[i][k] = dynArray[i][k] - c * dynArray[j][k];
                }
            }
        }
    }
    return dynArray;
}

int main()
{
    cout << "Zadejte rad matice: ";
    int order;
    cin >> order;
    double **arr = allocateDynamicArray(order);
    addAndPrintArray(arr, order);
    gaussElimination(arr, order);
    deallocateDynamicArray(arr);

    return 0;
}

谁能告诉我什么是错的?

1 个答案:

答案 0 :(得分:5)

问题是在C / C ++中,数组的第一个元素应该有索引0,所以你的

for(int i=1; i<=order; i++)

应该是

for(int i=0; i<order; i++)

gaussElimination函数中。