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

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;
}

最佳答案

您没有为矩阵的元素分配内存,只为指向各行的指针分配内存。
你需要这样的东西:

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

当然,你必须以同样的方式释放东西,当你完成它。
for (i = 0; i < n; i++)
    free(matrix[i]);

free(matrix);

关于c - 取矩阵的第一个值时的分割错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7825348/

10-09 09:03