Erreur de segmentation - C
corentin.93
Messages postés
1926
Statut
Membre
-
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 t32 ✓ - Forum Livebox
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- Dans la table des matières du document à télécharger, le chapitre 6 et ses 2 sections n'apparaissent pas. trouvez l'erreur dans la structure du document et corrigez-la. mettez à jour la table des matières. quel est le mot formé par les lettres en majuscules de la table des matières après sa mise à jour ? - Forum Word
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.