Erreur de segmentation - C
corentin.93
Messages postés
1737
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour
J'ai un petit souci dans un programme en C. Je veux passer un tableau à deux dimensions (char**) à une fonction qui lui alloue dynamiquement de la mémoire, mais lorsque j'essaie de lire dans ce tableau via une autre fonction, ou par le main, il me donne un erreur de segmentation.
Voici le code :
Fichier du main
Fichier des fonctions
Merci d'avance de votre aide!
J'ai un petit souci dans un programme en C. Je veux passer un tableau à deux dimensions (char**) à une fonction qui lui alloue dynamiquement de la mémoire, mais lorsque j'essaie de lire dans ce tableau via une autre fonction, ou par le main, il me donne un erreur de segmentation.
Voici le code :
Fichier du main
#include <stdio.h> #include "fonctions.h" #define TAILLEG 10 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; }
Fichier des fonctions
#include <stdlib.h> #include <stdio.h> #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); } } }
Merci d'avance de votre aide!
A voir également:
- Erreur de segmentation en c
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- J'aime par erreur facebook notification - Forum Facebook
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
3 réponses
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; }
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.