我在初始化(动态)数组中的结构部分时遇到了一些小麻烦。这是我到目前为止我使用子例程来创建结构
t_grille_animaux creer_grille(int dim_ligne, int dim_col)
{
t_grille_animaux grille;
grille.la_grille = (t_case_animal **) malloc(sizeof(t_case_animal)*dim_ligne*dim_col);
grille.dim_colonne = dim_col;
grille.dim_ligne = dim_ligne;
grille.nb_predateurs = NULL;
grille.nb_proies = NULL;
return grille;
}
这是我的结构:
typedef struct
{
t_case_animal ** la_grille; //2D array
int dim_ligne;
int dim_colonne;
int nb_proies;
int nb_predateurs;
} t_grille_animaux;
typedef struct
{
t_contenu etat;
t_animal animal;
} t_case_animal;
typedef enum {VIDE, PROIE, PREDATEUR} t_contenu;
typedef struct
{
int age;
int jrs_gestation;
int energie;
int disponible;
} t_animal;
(对不起语言)
我现在得到的是,不是数组中结构的一切都很好。但阵列中的所有内容都是未声明的。
答案 0 :(得分:1)
这应该可以解决问题:
#define NUM_ROWS (10)
#define NUM_COLS (15)
grille.la_grille = malloc(NUM_ROWS * sizeof(*grille.la_grille));
for(int row = 0; row < NUM_ROWS; row++)
grille.la_grille[row] = malloc(NUM_COLS * sizeof(**grille.la_grille));
答案 1 :(得分:1)
malloc()
函数不一定(必然)将分配的字节初始化为任何值。因此,在调用malloc()
之后,您应该明确初始化已分配的数据。
话虽如此,您还有几个关于如何存储二维数组的选择。这取决于您希望如何访问数据。由于C没有真正的多维数组,您可以:
dim_ligne*dim_col
值t_case_animal
的单维数组
dim_ligne
的行指针数组,每个指针指向另一个dim_col
值的单维数组对于第一种情况,请将la_grille
的声明更改为:
t_case_animal * la_grille;
并以la_grille[j*dim_colonne+i]
之类的方式访问您的值。
对于第二种情况,请务必初始化您的子阵列:
grille.la_grille = (t_case_animal **) malloc(sizeof(t_case_animal*)*dim_ligne);
for (int i = 0; i < dim_ligne; i++) {
grille.la_grille[i] = (t_case_animal *) malloc(sizeof(t_case_animal)*dim_col);
}
在第二种情况下,您可以像la_grille[j][i]
一样访问您的值。
答案 2 :(得分:-1)
您可以使用malloc()
为每行分配内存。以下代码应该有效:
#include<stdlib.h>
typedef struct
{
int age;
int jrs_gestation;
int energie;
int disponible;
}t_animal;
typedef enum {VIDE, PROIE, PREDATEUR} t_contenu;
typedef struct
{
t_contenu etat;
t_animal animal;
} t_case_animal;
typedef struct
{
t_case_animal ** la_grille; //2D array
int dim_ligne;
int dim_colonne;
int nb_proies;
int nb_predateurs;
} t_grille_animaux;
t_grille_animaux creer_grille(int dim_ligne,int dim_col)
{
t_grille_animaux grille;
grille.la_grille = (t_case_animal**) malloc(sizeof(t_case_animal*)*dim_ligne);
for(int i=0; i<dim_ligne; i++) {
grille.la_grille[i] = (t_case_animal*) malloc(sizeof(t_case_animal)*dim_col);
}
grille.dim_colonne = dim_col;
grille.dim_ligne = dim_ligne;
grille.nb_predateurs = 0;
grille.nb_proies = 0;
return grille;
}
int main(int argc, char* argv[])
{
t_grille_animaux test;
test = creer_grille(3, 4);
}