1

我对语言 C 很陌生,我需要进行大量矩阵计算,因此我决定使用矩阵结构。

矩阵.h

struct Matrix
{
    unsigned int nbreColumns;
    unsigned int nbreRows;
    double** matrix;
};

struct Matrix CreateNewMatrix(unsigned int n,unsigned int m);
double GetMatrixValue(struct Matrix* m,unsigned int ligne,unsigned int colonne);

矩阵.c

#include "matrix.h"

struct Matrix CreateNewMatrix(unsigned int n,unsigned int m){
    struct Matrix mat;
    mat.nbreColumns = n;
    mat.nbreRows = m;
    mat.matrix = (double**)malloc(n * sizeof(double*));

    unsigned int i;
    for(i = 0; i < n; i++)
    {
        mat.matrix[i] = (double*)calloc(m,sizeof(double));
    }

    return mat;
}

double GetMatrixValue(struct Matrix* m,unsigned int ligne,unsigned int colonne){
    return m->matrix[ligne][colonne];
}

然后我编译,没有错误...

我做了一些测试:

主程序

struct Matrix* m1 = CreateNewMatrix(2,2);

printf("Valeur : %f",GetMatrixValue(m1,1,1));


编辑:当我运行我的代码时,我有“.exe 已停止工作”..


我做错什么了 ?

4

2 回答 2

2

CreateNewMatrix返回一个Matrix不是一个Matrix*

struct Matrix* m1 = CreateNewMatrix(2,2);
printf("Valeur : %f",GetMatrixValue(m1,1,1));

应该

struct Matrix m1 = CreateNewMatrix(2,2);
printf("Valeur : %f",GetMatrixValue(&m1,1,1));

您应该在所有警告都打开的情况下进行编译,并且在所有警告消失之前不要运行程序。

于 2013-11-05T18:37:34.240 回答
0

您声明CreateNewMatrix返回一个结构:

struct Matrix CreateNewMatrix(unsigned int n,unsigned int m){

但是当你使用它时,你期望一个指向结构的指针:

struct Matrix* m1 = CreateNewMatrix(2,2);

不过,这应该是编译器错误。

于 2013-11-05T18:37:25.817 回答