Pb memoire sur fonction recursive

MrKribou Messages postés 21 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 8 novembre 2002 - 29 août 2002 à 02:10
MrKribou Messages postés 21 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 8 novembre 2002 - 31 août 2002 à 00:17
J'ai fait une fonction pour rechercher un repertoire sur le disque qui renvois ensuie le path complet de ce repertoire. Donc cette fonction recherche dans tous les repertoires et donc elle s'appele recursivement. Seulement, j'ai un probleme car au bout d'un certains moments de recherche ca plante.
Je pense donc que c'est un probleme de "delete".

Bon aller je mets le code de la fonction parce que c'est pas tres comprehensible sinon (faites pas gaffe aux erreurs de prog autre juste le probleme de memoire :))

char* findPath(char* dirToFind, char* dir, int maxLevel)
{
maxLevel--;
char* ret ="";
char* fileDir=new char;
wsprintf(fileDir,"%s%s",dir,"*.*");

WIN32_FIND_DATA wData;
char nom[MAX_PATH];

HANDLE listing;
listing = FindFirstFile(fileDir, &wData);

while((FindNextFile(listing, &wData)))
{
if(wData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
nom = wData.cFileName;

char* newDir=new char;
wsprintf(newDir,"%s%s",dir,nom);
wsprintf(newDir,"%s%s",newDir,"\");

if (!strcmp(nom, dirToFind))
{
ret = newDir;
break;
} if (strcmp(nom, "..") && maxLevel !-1) ret findPath(dirToFind ,newDir, maxLevel);
}
if (ret !="") break;
//ici je pensais mettre un delete newDir mais ca marche pas plus
}
return ret;
}

l'attribut maxLevel correspond aux nombres de sous repertoires que j'ai du mettre en place a cause de mon probleme.

Merci si vous prenez le temps d'essayer de comprendre.

7 réponses

jfloviou Messages postés 17 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 25 septembre 2002
29 août 2002 à 04:16
Comme ca a premiere vue, je dirais que je ne suis pas d'accord avec ton char * tru=new char...

tu utilises apres truc comme un buffer... donc il vaudrait mieux initialiser ton buffer avec la bonne taille et non juste un seul caratere...

a ta place j'utiliserais malloc et free avec par ex
char * newdir=(char * )malloc(1024) (wsprintf est limite a un buffer de 1024)
et a la fin: free(newdir)

cependant, tu as peut etre l'habitude d'utiliser new char.... moi ca me parait bizarre....

jaja
0
MrKribou Messages postés 21 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 8 novembre 2002
30 août 2002 à 02:34
C'est pas tant que j'ai pris cette habitude, c'est que je viens juste de me mettre au c++; alors pour l'instant je regarde comment font les autres (moralite : je suis innocent:p)

Je vais essayer ton truc...mais la fonction malloc, c une fonction heritee du C et j'avais cru lire (je suis pas sur de moi sur ce coup la) qu'il fallait eviter de l'utiliser en C++ (question philosophie plus que technique je pense) c'est tu vrai ?
0
jfloviou Messages postés 17 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 25 septembre 2002
30 août 2002 à 19:19
ouah un canadien !!!!
(je reviens du quebec il y a une semaine!!!) je t'ai identifie par le c'est-tu vrai...

tu as raison pour le malloc.... MAIS un new cree un espace memoire d'une taille definie ex: new int => reserve l'espace pour un int... new bidule reserve l'espace de la taille de bidule (si c une classe ou un struct etc) OR new char reserve donc l'espace pour 1 char.... et pas un buffer de char! donc moi j'utilise malloc pour les buffer, et pour tt ce qui traite la memoire tres en detaille... pour tout le reste, qd on veut que l'objet a reserver soit un peu complique, la pas photo il faut utiliser new et delete...

Mais si on veut pousser en c++, tu pourrais utiliser les classes avancees telles que CString ou atl::string! (je ne sais plus si c'est propre au MFC...)

c'est tu compris mon chum?

JF

PS : si tu utilises les MFC d'ailleurs, il ya surement une classe qui fait deja ta job!

jaja
0
MrKribou Messages postés 21 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 8 novembre 2002
30 août 2002 à 20:10
Hehehee wowow faut pas se fier auz apparences :)
Chui breton pur et dur, mais je viens de passer un ans au quebec (je suis revenu ya kkes semaines et j'arrive pas a perdre certaines habitudes....
Et sinon bonne vavcances ? :)

Et pas de MFC pour moi...
(desole pour ce message un peu hors sujet)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jfloviou Messages postés 17 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 25 septembre 2002
30 août 2002 à 20:46
pas vacances, mais stage ou j'ai fait du new delete malloc a tire la rigo....

bref treve de hors sujet, c'est de la balle le quebec...

PS: un breton ? tu bosserais pas sur rennes par hasard ?

jaja
0
MrKribou Messages postés 21 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 8 novembre 2002
30 août 2002 à 23:52
reponse rapide au PS : moi je cherchais un job la bas mais pas trouver alors je cherche ici donc nan je travaille pas a rennes mais j'aimerai en trouver un la.
0
MrKribou Messages postés 21 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 8 novembre 2002
31 août 2002 à 00:17
Bon je viens d'essayer ton char * newdir=(char * )malloc(1024) et ensuite free(newdir) et ca marche.

Bon mais quand je fais char* newDir = new char et ensuite un delete newDir la ca marche pas...pourtant j'avais vu que ca se faisait. Si kkun a des renseignements a ce sujet ?
0
Rejoignez-nous