функция contrucMat не возвращает новую матрицу, в которой есть оценщики из матрицы t [N] [M], contrucMat возвращает матрицу параметров m Null
если вы имеете в виду после
matrice_creuse *m = NULL;
...
construcMat(m, ..);
m по-прежнему равно NULL, это нормально, когда вы устанавливаете m в construcMat , вы устанавливаете локальную переменную, поэтому нет никакого влияния на вызывающего код выше
Одно из решений состоит в том, чтобы не указывать m в параметре construcMat , потому что это бесполезно, но возвращать его:
matrice_creuse *m = construcMat(..);
с
matrice_creuse * construcMat(int t[N][M], size_t Nligne, size_t Ncol) {
matrice_creuse * m = creeMat(Nligne, Ncol);
...
return m;
}
В противном случае измените профиль, чтобы использовать переменную in-out :
void construcMat(matrice_creuse ** m, int t[N][M], size_t Nligne, size_t Ncol) {
*m = creeMat(Nligne, Ncol);
(*m)->Ncolonnes = Ncol;
(*m)->Nlignes = Nligne;
(*m)->liste = malloc(Nligne * sizeof(liste_ligne));
liste_ligne * lignes = (*m)->liste;
for (size_t i = 0; i < Nligne; i++) {
lignes[i] = NULL;
liste_ligne * dernier = lignes[i];
for (size_t j = 0; j < Ncol; j++) {
if (t[i][j] != 0) {
element *e = creeEle(j, t[i][j]);
if (dernier != NULL) {
dernier->suiv = e;
dernier = dernier->suiv;
} else {
dernier = e;
lignes[i] = dernier;
}
}}}}
и вызов изменяется на:
matrice_creuse *m = NULL;
...
construcMat(&m, ..);
Предупреждение, вы пропустили "*" в строке liste_ligne dernier = m->liste[i];
, я исправил код выше