noname001
Messages postés21Date d'inscriptiondimanche 15 novembre 2009StatutMembreDernière intervention 1 mai 2010
-
13 mars 2010 à 15:03
noname001
Messages postés21Date d'inscriptiondimanche 15 novembre 2009StatutMembreDernière intervention 1 mai 2010
-
17 mars 2010 à 13:19
Bonjour à tous,
j'aimerais faire appel à vos lumières concernant deux codes. Ils ont tous les deux pour but de créer un tableau 2D dynamiquement et d'ensuite l'initialiser avec des caractères vides ( ' ').
Voici le premier, qui lui fonctionne :
#include
using namespace std;
void intialisation(char **tableau)
{
// ON REMPLIT LE TABLEAU DE CASE VIDE
for (int i=0; i<5 ; i++)
{
for(int j=0; j<5; j++)
{
tableau[i][j] = ' ';
}
}
}
int main()
{
char **tab;
// CREATION TABLEAU DYNAMIQUEMENT
tab = new char*[5];
for (int i=0; i<5 ; i++)
{
tab[i] = new char[5];
}
intialisation(tab);
return 0;
}
Et ensuite, le deuxième où la création dynamique du tableau a été placé dans la fonction création. Mais ce programme me donne une erreur de segmentation.
#include
using namespace std;
void intialisation(char **tableau)
{
// ON REMPLIT LE TABLEAU DE CASE VIDE
for (int i=0; i<5 ; i++)
{
for(int j=0; j<5; j++)
{
tableau[i][j] = ' ';
}
}
}
void creation(char **tableau)
{
// CREATION TABLEAU DYNAMIQUEMENT
tableau = new char*[5];
for (int i=0; i<5 ; i++)
{
tableau[i] = new char[5];
}
}
int main()
{
char **tab;
creation(tab);
intialisation(tab);
return 0;
}
Quelle est l'erreur du deuxième code ? Pourquoi le fait d'avoir placé la création du tableau dans une fonction à part fait-il foirer le programme (erreur de seg) ?
Pour répondre à ta question, c'est tout simplement que tab est remplit localement dans la fonction creation. Donc tu perds son accès en dehors de la fonction. Il te faut retourner l'adresse de ce que tu as fait:
char** creation()
{
// CREATION TABLEAU DYNAMIQUEMENT
char** tableau = new char*[5];
for (int i=0; i<5 ; i++)
{
tableau[i] = new char[5];
}
return tableau;
}
int main()
{
char **tab;
tab = creation();
intialisation(tab);
return 0;
}