L'important, c'est de ne jamais retourner de variable local tout
simplement parce qu'à la sortie de la fonction, elles sont détruites:
char *NePasFaire (void)
{
char VarLocal[256]; // Sera détruit à la fin de la fonction
return VarLocal;
}
Certain te dirons qu'il est aussi possible d'allouer la mémoire
directement dans la fonction et retourné sont pointeur mais ce n'est
pas très recommandé non-plus (sauf pour les fonctions spécifiquements
fait pour ça comme une fonction qui doit calculer certaine chose pour
allouer):
char *PasRecommande(void)
{
char *pointeur = (char*)malloc(256); // Risque d'oublier de libérer la mémoire
// Fait un code malpropre en plus
return pointeur;
}
En gros, l'idéal est d'allouer la mémoire avant la fonction, passer le
pointeur vers la zone mémoire en paramètre de cette même fonction et,
si nécessaire, retourné le pointeur vers cette même zone (comme dans
l'exemple du précédent post) ou retourner un pointeur sur la fin de la
chaine pour permettre un chainage directe. On libère bien sur, si il
s'agit d'allocation dynamique, après l'utilisation de la zone mémoire.
C++ (@++)