#1 Le 21/11/2015, à 15:58
- Leagan
Allocation dynamique de tableau a 2 dimensions
Bonjour bonjour!
J'ai un projet dans mon UE d'info consistant a coder un tout noir ou tout blanc.
Pour ceux qui ne connaissent pas : Une grille de m lignes et n colonnes avec des cases pouvant prendre deux couleurs ( noir ou blanc). Au début toutes les cases sont noir et le but est de les rendre toutes blanches. En cliquant sur une case on change la couleur de la case sélectionnée ainsi que ses 4 cases adjacentes ( nord sud est et ouest ).
Mon problème est la déclaration de mon tableau Grille qui va stocker les valeur de chaque cases.
Un " int Grille[m][n] " étant impossible je me suis tournée pour faire ça proprement sur l'allocation dynamique. A la compilation aucunes erreur , mais quand je lance le programme j'obtiens un " erreur de segmentation " autrement dis ( je crois ) je tente d’accéder a une case mémoire qui n'est pas celle de mon tableau:
voici mon code:
La fonction qui déclare et initialise mon tableau grille a 0
(
void initialiser_grille(int **Grille, int m, int n)
{
int i, j;
/* Initialisation du tableau Grille*/
Grille = malloc(m * sizeof(int));
if(Grille == NULL){
printf(" malloc error ");
}
for (i=0; i<m ; i++){
Grille[i]=malloc(n* sizeof(int));
if ( Grille[i] == NULL ) printf(" malloc [i] failed ");
}
for (i =0; i <m; i++){
for (j=0; j<n ; j ++){
Grille[i][j]= 0;
}
}
}
)
La fonction qui l'affiche en console :
(
void afficher_grille(int **Grille, int m, int n)
{
int i,j;
for (i =0; i <m; i++){
for (j=0; j<n ; j ++){
printf(" %d",Grille[i][j]);
/* Avec un gcc -g j'ai pu voir que l'erreur se produisait des la case [0][0] L'initialisation fonctionne sans erreur apparente*/
}
printf("\n");
}
}
)
et mon main : (
int main (void){
int m,n;
int **Grille;
printf("\nEntrez le nombre de lignes et de colonnes:");
scanf(" %d %d",&m,&n);
initialiser_grille(Grille,m,n);
afficher_grille(Grille, m,n);
/* InitWindow(m,n);*/
return 0;
}
)
J'aimerai savoir aussi si il était possible de compiler un fichier.c depuis vim . Car je dois à chaque modifications sortir de vim faire mon gcc puis reouvrir vim.
J'aimerai aussi savoir si c'est possible de copier quelque chose depuis la console ( ici mon code source ) et/ou vim pour le coller autre part ( ici ce message ). et réciproquement copier une commande trouvée sur internet dans ma console sans devoir la réécrire forcement .
Voilou voilou ca fait beaucoup de choses je suis désolé >.< je suis sous Linux depuis peu de temps , je m'y plaît bien, mais les débuts sons ardus
Hors ligne
#2 Le 21/11/2015, à 17:36
- grigouille
Re : Allocation dynamique de tableau a 2 dimensions
Essaie ceci :
int main (void){
int m,n;
int **Grille=NULL;
printf("\nEntrez le nombre de lignes et de colonnes:");
scanf(" %d %d",&m,&n);
initialiser_grille(Grille,m,n);
if(Grille == NULL)
{
printf("critical error\n");
return 1;
}
afficher_grille(Grille, m,n);
/* InitWindow(m,n);*/
return 0;
}
Après, il y a d'autres problèmes dans ton code .
Dernière modification par grigouille (Le 21/11/2015, à 17:38)
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#3 Le 21/11/2015, à 17:53
- pingouinux
Re : Allocation dynamique de tableau a 2 dimensions
Bonsoir,
Pour récupérer dans main la valeur de Grille après l'appel de initialiser_grille, il faut que tu passes &Grille en argument :
void initialiser_grille(int ***Grille, int m, int n)
{
int i, j;
/* Initialisation du tableau Grille*/
*Grille = (int**)malloc(m * sizeof(int*));
if(*Grille == NULL){
printf(" malloc error ");
}
for (i=0; i<m ; i++){
(*Grille)[i]=(int*)malloc(n* sizeof(int));
if ( (*Grille)[i] == NULL ) printf(" malloc [i] failed ");
}
for (i =0; i <m; i++){
for (j=0; j<n ; j ++){
(*Grille)[i][j]= 0;
}
}
}
à appeler ainsi :
initialiser_grille(&Grille,m,n);
Ajouté :
J'aimerai savoir aussi si il était possible de compiler un fichier.c depuis vim . Car je dois à chaque modifications sortir de vim faire mon gcc puis reouvrir vim.
Tu ouvres 2 terminaux, tu édites le fichier dans l'un et compiles dans l'autre, sans sortir de vim
J'aimerai aussi savoir si c'est possible de copier quelque chose depuis la console ( ici mon code source ) et/ou vim pour le coller autre part ( ici ce message ). et réciproquement copier une commande trouvée sur internet dans ma console sans devoir la réécrire forcement .
Pour Copier : Ctrl+C (Shift+Ctrl+C dans un terminal)
Pour Coller : Ctrl+V (Shift+Ctrl+V dans un terminal)
Dernière modification par pingouinux (Le 21/11/2015, à 18:04)
Hors ligne
#4 Le 23/11/2015, à 11:15
- soshy
Re : Allocation dynamique de tableau a 2 dimensions
Pour le code je laisserai d'autres repondre...
J'aimerai savoir aussi si il était possible de compiler un fichier.c depuis vim . Car je dois à chaque modifications sortir de vim faire mon gcc puis reouvrir vim.
dans vim tu peux directement executer des commandes (gcc inclus donc) comme ceci par exemple
:!ls
J'aimerai aussi savoir si c'est possible de copier quelque chose depuis la console ( ici mon code source ) et/ou vim pour le coller autre part ( ici ce message ). et réciproquement copier une commande trouvée sur internet dans ma console sans devoir la réécrire forcement .
Tu as plusieurs solutions possibles :
- ctrl+shift+c / ctrl+shift+v dans le terminal (a voir si ca fonctionne aussi dans vim)
- ctrl insert / shift insert
- selection a copier / clique molette de la souris (si tu peux) pour coller
Hors ligne
#5 Le 23/11/2015, à 11:16
- tiramiseb
Re : Allocation dynamique de tableau a 2 dimensions
Je suis prêt à parier tout ce que tu veux qu'il y a un plugin pour vim, pour qu'il exécute gcc et/ou make avec une simple commande ou un raccourci clavier.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#6 Le 23/11/2015, à 12:19
- grim7reaper
Re : Allocation dynamique de tableau a 2 dimensions
Je suis prêt à parier tout ce que tu veux qu'il y a un plugin pour vim, pour qu'il exécute gcc et/ou make avec une simple commande ou un raccourci clavier.
Même pas besoin de plugin pour ça.
:h make
Hors ligne
#7 Le 23/11/2015, à 14:33
- pires57
Re : Allocation dynamique de tableau a 2 dimensions
J'aimerai savoir aussi si il était possible de compiler un fichier.c
:!gcc file.c
Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn
Hors ligne