enthält. Also habe ich Probleme damit zu verstehen, wie ich Speicher einer Struktur zuweisen soll, die andere Struktur enthält.Zuordnen von Speicher zu einer Struktur, die eine Matrix von struct enthält, die selbst eine Matrix von Integer
hier sind meine zwei struct:
typedef struct{
int ** constraint;
int max_domain;
}Constraint;
typedef struct{
Constraint ** constraint_matrix;
int max_var;
}Constraint_mat;
Nun ich versuche, eine Funktion zu erstellen Speicher zu einem Constraint_mat zuzuweisen, wie dies Start:
Constraint_mat * allocationConstraintMatrix(int max_var){
printf("Initialisation Matrice de Contrainte : allocation mémoire\n");
Constraint_mat * matrice_contrainte = malloc(max_var*(max_var-1)*(sizeof *matrice_contrainte))
matrice_contrainte->max_var = max_var;
matrice_contrainte->constraint_matrix = malloc(max_var*sizeof(matrice_contrainte->constraint_matrix));
if(matrice_contrainte->constraint_matrix == NULL){
printf("Erreur allocation memoire matrice de contrainte\n");
exit(-1);
}
for(int i = 0; i < max_var; i++){
matrice_contrainte->constraint_matrix[i] = malloc(max_var*sizeof(matrice_contrainte->constraint_matrix[i]));
if(matrice_contrainte->constraint_matrix[i] == NULL){
printf("erreur allocation memoire matrice de domaine\n");
exit(-1);
}
}
printf("Succes\n");
}
Ich verstehe nicht, wie ich Ich nehme an, dies zuzuteilen. Muss ich Platz für jede Einschränkung vorbereiten, die in der constraint_mat-Matrix enthalten ist? Ich meine, ich weiß, dass Constraint ** constraint_matrix max_var * max_var Constraint enthalten wird, und dass in jeder Constraint int ** Constraint max_domain * max_domain int enthalten wird. Bedeutet das, dass ich max_var * max_var * max_domain * max_domain * sizeof (int) für Constraint_mat vorbereiten muss?
Was ist "etwas"? –
Das sind keine "Matrizen", sondern Zeiger. Eine Matrix wäre etwas wie "int Matrix [5] [6]" mit gegebenen Dimensionen. – jdarthenay
@VladfromMoscow Im malloc? Was ich wissen will. Und das etwas andere ist die Instanziierung dessen, was in meiner Struktur ist – Traknir