cs_Nairos
Messages postés11Date d'inscriptionmardi 19 octobre 2010StatutMembreDernière intervention 7 janvier 2013
-
6 déc. 2012 à 14:19
cs_Nairos
Messages postés11Date d'inscriptionmardi 19 octobre 2010StatutMembreDernière intervention 7 janvier 2013
-
6 déc. 2012 à 15:45
Bonjour,
J'ai écris un programme qui déclare, initialise puis affiche un tableau à deux dimensions. Toutefois, je souhaiterais le moduler en plusieurs fonctions : une qui déclare, une qui initialise et une qui affiche.
Le code suivant est signalé sans erreur, est compilé et fonctionne :
int main()
{
char** tab=NULL;
int lignes=5;
int colonnes=5;
//déclare un tableau
tab = malloc(sizeof(char*)*lignes);
for (int i = 0; i<lignes ; i++)
{
tab[i]=malloc(colonnes*sizeof(char*));
}
//Remplit un tableau de char
for (int i = 0; i<5 ; i++)
{
for (int j=0; j<5; j++)
{
tab[i][j]='M';
}
}
//Imprime à l'écran un tableau de char
for (int i = 0; i<5 ; i++)
{
puts("\n");
for (int j=0; j<5; j++)
{
putchar(' ');
putchar(' ');
printf("%c",tab[i][j]);
}
}
free(tab);
return 0;
}
Toutefois, dès que j'essaye de transformer ceci en fonction, à savoir comme ceci :
void DeclarationTabChar(char** tab, int lignes, int colonnes)
{
//déclare un tableau
tab = malloc(sizeof(char*)*lignes);
for (int i = 0; i<lignes ; i++)
{
tab[i]=malloc(colonnes*sizeof(char*));
}
}
void UniRemplissageTabChar(char **Tab, char caractereunique)
{
for (int i = 0; i<5 ; i++)
{
printf("ok");
for (int j=0; j<5; j++)
{
printf("ok");
Tab[i][j]=caractereunique;
printf("ok");
}
}
}
void AffichageTabChar(char** tab)
{
for (int i = 0; i<5 ; i++)
{
for (int j=0; j<5; j++)
{
printf("%c",tab[i][j]);
}
}
}
int main()
{
tab = malloc(sizeof(char*)*lignes);
DeclarationTabChar(tab, 5,5);
UniRemplissageTabChar(tab,'M');
AffichageTabChar(tab);
free(tab);
}
Et là, plantage systématique, le code est signalé sans erreur et est compilé, mais il plante immédiatement.
Si des âmes charitables pouvaient m'éclairer, ça ne serait pas de refus.
N.
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 6 déc. 2012 à 14:49
Bonjour.
C'est tout simplement que tu fais passer "tab" dans DeclarationTabChar mais que tu affectes la copie et non le tableau en lui même. Tu ne récupères donc jamais la tableau initialisé, mais tu conserves ton pointeur non initialisé, d'où ton erreur. Il te faudrait faire un: DeclarationTabChar(&tab, 5,5); avec en déclaration: "void DeclarationTabChar(char*** tab, int lignes, int colonnes)
"
Je te propose une solution un peu plus élégante:
#include <stdio.h>
#include <stdlib.h>
char** declarationTabChar(int lignes, int colonnes)
{
char** tab = malloc(sizeof(char*) * lignes);
for (int i = 0; i < lignes ; ++i)
tab[i] = malloc(colonnes * sizeof(char*));
return tab;
}
void uniRemplissageTabChar(char **tab, char caractereunique,
int lignes, int colonnes)
{
for (int i = 0; i < lignes ; ++i)
for (int j = 0; j < colonnes; ++j)
tab[i][j] = caractereunique;
}
void affichageTabChar(char** tab,
int lignes, int colonnes)
{
for (int i = 0; i < lignes; ++i)
{
for (int j = 0; j < colonnes; ++j)
printf("%c ", tab[i][j]);
printf("\n");
}
}
int main(void)
{
int ligne = 7;
int colonne = 5;
char** tab = declarationTabChar(ligne, colonne);
uniRemplissageTabChar(tab,'M', ligne, colonne);
affichageTabChar(tab, ligne, colonne);
free(tab);
return 0;
}
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
cs_Nairos
Messages postés11Date d'inscriptionmardi 19 octobre 2010StatutMembreDernière intervention 7 janvier 2013 6 déc. 2012 à 15:45
J'avais envisagé cette solution mais je n'étais parvenu à rien! Je fais du C depuis un mois et sans doutes m'embrouillais-je avec les '&'...
Un grand merci à toi!