1

私は言語 C に非常に慣れていないため、多くの行列計算を行う必要があるため、行列構造体を使用することにしました。

Matrix.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);

Matrix.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];
}

次に、コンパイルしますが、エラーはありません...

私はいくつかのテストを行いました:

Main.c

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 に答える