Dabagab
Dabagab

Reputation: 2875

segmentation fault when I take in the first value of matrix

If I run my program, and When I typed the dimensions of matrix, after I typed the first value of matrix , the console write out: Segmentation fault

For example:

4

3

Segmentation fault Process returned 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;
}

Upvotes: 1

Views: 274

Answers (1)

cnicutar
cnicutar

Reputation: 182744

You didn't allocate memory for the elements of the matrix, only for the pointers to the individual lines.

You need something like:

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

Of course, you must free stuff in the same manner when you're done with it.

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

free(matrix);

Upvotes: 5

Related Questions