Initialisation d’une masortingce variable dans une structure C

Je ne parviens pas à initialiser une masortingce variable dans une structure en C. J’ai lu quelques articles ( post ) mais je n’arrive pas à résoudre le problème. Ne me demandez pas pourquoi, mais pour une tâche, je dois initialiser une masortingce située dans une structure.

Mon code pour la structure est:

typedef struct maze{ int row; int column; char masortingx[row][column]; }maze; 

En appelant une fonction différente, après avoir lu un certain fichier, je dois initialiser une masortingce avec ses parameters donnés, donc 2 parameters “row” et “column”.

Mon code pour la fonction init est:

 struct maze* init_maze(int row, int column) { struct maze mazeFilled; struct maze *mazePointer; mazeFilled.row = row; mazeFilled.column = column; return mazePointer; } 

Mais comme vous pouvez le deviner, cela ne fonctionne pas, les gens ont déjà mentionné qu’il était difficile de créer une masortingce à partir de 2 variables. Quelqu’un pourrait-il expliquer ce que je fais mal?

EDIT 1:

J’ai changé mon code en fonction des posts mais la structure rest la même. J’avais besoin d’allouer le pointeur pour qu’il rest même actif en dehors du scoop.

Mon nouveau code pour la fonction init est le suivant:

 struct maze* init_maze(void) { int row = 6; int column = 10; struct maze *mazePointer = malloc(sizeof (*mazePointer)); mazePointer->row = row; mazePointer->column = column; return mazePointer; } 

EDIT 2:

Pensez que j’ai découvert quelle était mon erreur, je n’ai pas alloué de mémoire pour la masortingce. Ma nouvelle fonction init:

 struct maze* init_maze(void) { int row = 6; int column = 10; maze *mazePointer; mazePointer = malloc(sizeof(maze)); mazePointer->row = row; mazePointer->column = column; mazePointer->masortingx = malloc(row * sizeof(char*)); for (int i; i < row; i++) { for(int j; j  masortingx[i][j] = malloc(1 * sizeof(char*)); } } return mazePointer; } 

Je ne suis toujours pas sûr de savoir comment allouer de la mémoire pour le premier tableau, [i]. Quelqu’un pourrait-il me dire si je suis dans la bonne direction?

Quelqu’un pourrait-il expliquer ce que je fais mal?

Vous renvoyez un pointeur sur une structure de durée de stockage locale / automatique dont l’existence n’est pas garantie au-delà de la scope { } de la fonction.


Il y a un certain nombre de façons de le faire. Le but est de restituer une structure qui rest active et active même après le retour de la fonction.


La méthode la plus couramment utilisée consiste à allouer la structure de manière dynamic, à la peupler et à lui renvoyer un pointeur.

 struct maze* init_maze(int row, int column) { struct maze *pmazeFilled = malloc(sizeof(*pmazeFilled)); pmazeFilled->row = row; pmazeFilled ->column = column; return pmazeFilled; } 

Rappelez-vous que l’appelant doit libérer la mémoire allouée en appelant free sur le pointeur renvoyé.