当我接受矩阵的第一个值时,分段错误

Dab*_*gab 1 c segmentation-fault

如果我运行我的程序,当我输入矩阵的维度时,在输入矩阵的第一个值后,控制台会写出:分段错误

例如:

4

3
Run Code Online (Sandbox Code Playgroud)

分段错误进程返回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;
}
Run Code Online (Sandbox Code Playgroud)

cni*_*tar 5

您没有为矩阵的元素分配内存,仅用于指向各行的指针.

你需要这样的东西:

for (i = 0; i < n; i++)
    matrix[i] = malloc(n * sizeof(double));
Run Code Online (Sandbox Code Playgroud)

当然,当你完成它时,你必须以相同的方式释放东西.

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

free(matrix);
Run Code Online (Sandbox Code Playgroud)