ошибка сегментации, когда я беру первое значение матрицы - PullRequest
1 голос
/ 19 октября 2011

Если я запускаю свою программу и когда я набрал размеры матрицы, после того, как я набрал первое значение матрицы, консоль выписала: Ошибка сегментации

Например :

4

3

Ошибка сегментации Процесс вернул 139 (0x8B)

void inMatrix(int n, double **matrix)
{
    int j, i;
    for (i = 0; i < n; i++)
    {
        for (j= 0; j < n; j++)
        {
            scanf("%lf", &matrix[i][j]);
        }
    }
}

void inVector(double *vektor, int n)
{
    int k;
    for (k = 0; k < n; k++)
    {
        scanf("%lf", &vektor[k]);
    }
}

int main()
{
    int n;
    // read dimension of matrix and value
    scanf("%d", &n);

    //matrix
    double** matrix = (double **) calloc(n, sizeof ( double*));
    //vector
    double* vector = (double *) calloc(n, sizeof ( double));

    // read values of matrix
    inMatrix(n, matrix);
    // read values of vector
    inVector(vector, n);

    outVector(vector, n);
    printf("\n");

    return 0;
}

1 Ответ

5 голосов
/ 19 октября 2011

Вы не выделяли память для элементов матрицы, только для указателей на отдельные строки.

Вам нужно что-то вроде:

for (i = 0; i < n; i++)
    matrix[i] = malloc(n * sizeof(double));

Конечно, вы должны освободить вещи таким же образом, когда закончите.

for (i = 0; i < n; i++)
    free(matrix[i]);

free(matrix);
...