我是langage 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已停止工作”..
我做错了什么?
答案 0 :(得分: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));
您应该编译所有警告并且不运行该程序,直到所有警告都消失。
答案 1 :(得分:0)
您声明CreateNewMatrix
返回结构:
struct Matrix CreateNewMatrix(unsigned int n,unsigned int m){
但是当你使用它时,你期望一个指向结构的指针:
struct Matrix* m1 = CreateNewMatrix(2,2);
但这应该是编译器错误。