Erreur de segmentation - C
Fermé
corentin.93
Messages postés
1737
Date d'inscription
dimanche 20 mai 2007
Statut
Membre
Dernière intervention
19 décembre 2015
-
27 sept. 2012 à 14:22
Utilisateur anonyme - 27 sept. 2012 à 16:54
Utilisateur anonyme - 27 sept. 2012 à 16:54
A voir également:
- Erreur de segmentation en c
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur 3005 france tv - Forum TV & Vidéo
- Erreur 5000 france tv - Forum iPhone
3 réponses
Utilisateur anonyme
27 sept. 2012 à 15:13
27 sept. 2012 à 15:13
Bonjour
Tu aimes bien te torturer, on dirait ^^.
Il y a longtemps que je n'ai pas fait de C, mais à vue de nez :
La variable tab que tu initialises dans initTab est une variable locale à la fonction initTab. Donc ses modifications ne sont pas "remontées" à la variable tabJ1Bat du main, donc tu appelles affTab avec un pointeur non initialisé.
D'où les modifications :
Tu aimes bien te torturer, on dirait ^^.
Il y a longtemps que je n'ai pas fait de C, mais à vue de nez :
La variable tab que tu initialises dans initTab est une variable locale à la fonction initTab. Donc ses modifications ne sont pas "remontées" à la variable tabJ1Bat du main, donc tu appelles affTab avec un pointeur non initialisé.
D'où les modifications :
#include <stdafx.h> #include <stdio.h> #include <stdlib.h> #define TAILLEG 10 #define EAU '~' void initTab(char ***tab, int taille){ int i,j; *tab = (char**) calloc (taille,sizeof(char*)); for(i=0;i<taille;i++) { (*tab)[i]=(char*)calloc(taille,sizeof(char)); for(j=0;j<taille;j++) { (*tab)[i][j] = EAU; } } } void affTab(char **tab, int taille){ int i,j; char car; for(i=0;i<taille;i++) { for(j=0;j<taille;j++) { car = tab[i][j]; printf("%c",car); } printf("\n"); } } int main(){ int i,j; char **tabJ1Bat; initTab(&tabJ1Bat, TAILLEG); //il semble que l'erreur vienne de l'appel à cette fonction affTab(tabJ1Bat, TAILLEG); return 0; }
corentin.93
Messages postés
1737
Date d'inscription
dimanche 20 mai 2007
Statut
Membre
Dernière intervention
19 décembre 2015
250
27 sept. 2012 à 15:21
27 sept. 2012 à 15:21
Tout d'abord, MERCI (pas à sparw, hein).
On est bien d'accord que c'est inutile de passer les tableaux par référence, non ? Mais bon, notre prof nous a demandé de faire ainsi...
On est bien d'accord que c'est inutile de passer les tableaux par référence, non ? Mais bon, notre prof nous a demandé de faire ainsi...
On est bien d'accord que c'est inutile de passer les tableaux par référence,
Attention, tu ne passes aucun tableau ici, seulement des pointeurs. Ce n'est pas la même chose.
Quant à l'utilité de passer une variable par référence ou non, ça ne dépend pas du fait que c'est un tableau ou autre chose : ça dépend du fait que tu veux modifier ta variable ou non.
Ton exemple est tellement tordu que je me demande si c'est bien ça que ton prof attendait. Je me suis basé uniquement sur ce que tu avais écrit.
Attention, tu ne passes aucun tableau ici, seulement des pointeurs. Ce n'est pas la même chose.
Quant à l'utilité de passer une variable par référence ou non, ça ne dépend pas du fait que c'est un tableau ou autre chose : ça dépend du fait que tu veux modifier ta variable ou non.
Ton exemple est tellement tordu que je me demande si c'est bien ça que ton prof attendait. Je me suis basé uniquement sur ce que tu avais écrit.
corentin.93
Messages postés
1737
Date d'inscription
dimanche 20 mai 2007
Statut
Membre
Dernière intervention
19 décembre 2015
250
27 sept. 2012 à 15:39
27 sept. 2012 à 15:39
En gros, ce que je voulais faire, c'était déclarer un tableau à 2 dimensions dans le main, puis le passer à une fonction qui va lui allouer dynamiquement de la mémoire, et le remplir (on fait une sorte de bataille navale en fait).
corentin.93
Messages postés
1737
Date d'inscription
dimanche 20 mai 2007
Statut
Membre
Dernière intervention
19 décembre 2015
250
27 sept. 2012 à 15:48
27 sept. 2012 à 15:48
Et il ne peut pas être utilisé comme tel ?