DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 29 déc. 2004 à 23:57
Tu te mélange les pédales totales mon coco.
Déjà ce que tu dois savoir, c'est que les variables déclarées localement dans les fonctions n'ont pas besoin de delete, elles sont supprimées automatiquement dès la sortie de la fonction.
Ensuite, quand tu fais "char *texte = new char;" ca serait bien de spécifier la taille à allouer, car un char simple ne vaut que un seul octet!
Tu me diras que pourtant ton programme marche bien le premier coup!
Ceci est du au fait que texte soit un pointeur. Il indique donc l'adresse du premier élément que constotue ta chaine.
Autrement dis dans ton cas, il y a un dépassement de capacité qui ecrase les données présente sur les zone mémoires suivantes.
Pour terminer, il ne faut pas oublier qu'une fonction renvoyant un pointeur, renvoi une adresse mémoire et non un contenu.
Cela signifie qu'avec 2 appels succesifs de cette fonction, le premier résultat a de forte chance de se faire écraser par le deuxieme ou de se chevaucher.
En gros t'obtiens quelques choses d'illisible au final.
Commence par apprendre les bases de la programmation en C et par assimiler la notion de pointeur!
Si tu as besoin de conseil n'hésites pas!
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 30 déc. 2004 à 01:50
char * texte = new char; // Tu aloue une zone de 1 octet, pas suffisant
il faut faire char* texte = new char[...];
la méthode c_str() te donnera un char* à partir d'un string.
Si tu fais une allocation dans ta fonction, ce n'est pas à elle de faire le delete, sinon tu ne pourras jamais utiliser le résultat. Mais ce delete il faut bien le faire à un moment donné...
En général on passe en paramètre une zone déja allouée avant l'appel (comme par exemple le premier param de strcpy), sinon tu risques d'avoir des fuites de mémoire. Il n'est pas logique de voir du code comme ca:
char* p = scan(chemin);
delete[] p;
On fait plutot:
char* p = new char[260];
scan(p, chemin);
delete[] p;
Par contre pas de problème pour une fonction qui renvoie un string
voilà dans la procedure LRESULT CALLBACK WindowProcedure
je n'arrive pas a modifier mon "chemin"....
J'ai un doute sur le fait que la procedure en fait fait une boucle et me reassigne mon "chemin" que ce soit string ou char *
a cause de ma ListBox dans le switch...
en gros a chaque fois que j'utilise ListBee, le parametre devient "d:\" or je voudrais qu'il change.. est ce un probleme de pointeur ou est ce a cause de la procedure LRESULT CALLBACK WindowProcedure
Merci car vraiment je vois pas et si c pas a cause de la procedure ca m'eviterai de reprendre un gros bout de code