Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/11/2015, à 16: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 big_smile

Hors ligne

#2 Le 21/11/2015, à 18: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 roll.

Dernière modification par grigouille (Le 21/11/2015, à 18:38)


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#3 Le 21/11/2015, à 18: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, à 19:04)

Hors ligne

#4 Le 23/11/2015, à 12:15

soshy

Re : Allocation dynamique de tableau a 2 dimensions

Pour le code je laisserai d'autres repondre...

Leagan a écrit :

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
Leagan a écrit :

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, à 12: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.

Hors ligne

#6 Le 23/11/2015, à 13:19

grim7reaper

Re : Allocation dynamique de tableau a 2 dimensions

tiramiseb a écrit :

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, à 15: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