cs_opala
Messages postés34Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention19 novembre 2007
-
12 avril 2006 à 11:54
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 2006
-
12 avril 2006 à 15:22
Bonjour,
Je suis débutant en C. Je cherchais une fonction capable de copier un repertoire avec ses sous repertoire.
J'ai crée ma propre fonction, qui à l'air de marcher. Pour progresser, si vous avez la moindre remarque ou amélioration faites le moi savoir pour que j'adopte dès le début la bonne facon de programmer
//fonction qui va copier le repertoire szPathSource vers szPathDest
int CopyDir (char* szPathSource, char* szPathDest)
{
char* szMyPathSource = NULL;
char* szMyPathDest = NULL;
char* szBuffer = NULL;
WIN32_FIND_DATA MyFile;
HANDLE Myliste;
// C'est un repertoire on applique la fonction récursive
if( MyFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{
// on crée le repertoire
if (mkdir(szSousBufferDest))
return 1;
if (CopyDir (szSousBufferSource,szSousBufferDest))
return 1;
}
else
// C'est un fichier, on copie/colle
if (!CopyFile(szSousBufferSource, szSousBufferDest, FALSE))
return 1;
//on désalloue les buffer
szSousBufferSource = NULL;
szSousBufferDest = NULL;
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 12 avril 2006 à 12:41
la désollacation est mal faite
//on désalloue les buffer
szSousBufferSource = NULL;
szSousBufferDest = NULL;
free(szSousBufferSource);
free(szSousBufferDest);
=> la fonction free est appelée avec des pointeurs NULL
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 12 avril 2006 à 15:22
c'est normal parce que le pointeur n'a pas été alloué avec malloc (c'est une chaine constante statique en mémoire)
mettre à NULL les variables après les avoir libérer permet de s'assurer qu'on va pas les utiliser par mégarde (un test à NULL permettra alors de pas toucher à la variable).