destructeur - C++ - Programmation
Marsh Posté le 13-12-2004 à 16:11:06
Cherche même pas à comprendre, utilise std::string.
Marsh Posté le 13-12-2004 à 16:23:10
Avec std::string, ça tourne, je l'avais déjà essayé. Mais, je ne comprends pas pq l'autre manière ne fonctionne pas. Merci qd même.
Marsh Posté le 13-12-2004 à 16:24:41
C'est simple : les char *, c'est mal. Tu ne gagnes que ce genre de problèmes avec.
Marsh Posté le 13-12-2004 à 16:27:26
essaye
if(nom)
delete []nom;
et deja ya des truc louches :
nom = new char [strlen(nom1 + 1)];
c'est pas plutot ?
nom = new char [strlen(nom1)+1];
Marsh Posté le 13-12-2004 à 16:49:27
Je n'avais pas vu l'erreur du strlen.
Aves le test, ça ne fonctionne pas non plus.
Marsh Posté le 13-12-2004 à 17:08:28
Bon, donne le code complet de ta classe, sinon on y arrivera pas. Est-ce qu'elle est dérivée ? Est-ce qu'il y a d'autres constructeur, ou as-tu redéfinis l'opérateur d'affectation ?
Comment te sers tu des objets ?
Marsh Posté le 13-12-2004 à 17:10:41
Je suis passé sur dev-cpp, et là ça fonctionne.
Merci pour l'aide
Marsh Posté le 13-12-2004 à 17:23:06
si tu fais un vilain mix, tu le fais à peu près comme ça:
Code :
|
Code :
|
sinon tu vires ton "char* nom" de ta classe, et tu mets un std::string.
ça sera 10x plus propre.
Marsh Posté le 13-12-2004 à 17:54:15
ok merci bjone. Pour le std::string, je l'avais déjà essayé, avec succès, mais au cours, on nous demande parfois d'utiliser le char *.
Marsh Posté le 13-12-2004 à 18:26:17
j'en profites pour poser une question stupide (comme d'habitude...)
les std::string, c'est gourmand en place mémoire?
(je demande parce que je ne les ai jamais utilisé, et si c'est pas gourmand, ça voudrait p'te le coup que je m'y mettes)
Marsh Posté le 13-12-2004 à 18:29:44
kris1406 a écrit : ok merci bjone. Pour le std::string, je l'avais déjà essayé, avec succès, mais au cours, on nous demande parfois d'utiliser le char *. |
ouais, ben tu retournes en cours apprendre la forme de Coplien
Marsh Posté le 13-12-2004 à 18:30:13
bjone a écrit :
|
Pas besoin de faire ça, "delete 0;" et "delete [] 0;" sont valides tous les deux.
Par contre, certains (mauvais) compilos ne l'aiment pas, certes.
Marsh Posté le 13-12-2004 à 18:30:21
yulara a écrit : j'en profites pour poser une question stupide (comme d'habitude...) |
J'en profite pour faire une citation
"un programme qui plante est d'une utilité quasi-nulle"
Marsh Posté le 13-12-2004 à 18:32:16
Taz a écrit : J'en profite pour faire une citation |
"un programme dépassant les 512Ko ne rentre pas dans la PROM"
d'ou ma question (oui je sais, j'ai qu'à bosser sur un PC )
Marsh Posté le 13-12-2004 à 18:48:42
tu fait ton prototype avec un maximum d'objets déjà existants, après tu regardes comment optimiser tes ressources si tu es à cours...
Marsh Posté le 13-12-2004 à 18:54:55
probleme: mon soft existe deja depuis un certain, je n'ai que 10ko de libre, donc avant de me taper les 450000 lignes à modifier, je me renseigne c'est tout
Marsh Posté le 13-12-2004 à 18:56:10
la question est:
tes chaines là, si tu est en rom, t'as besoin de les dupliquer ?
Marsh Posté le 13-12-2004 à 18:56:28
ben techniquement une classe ça te permet aussi de centraliser le code de tes traitement de strings alors, ça peut réduire ton .text
Marsh Posté le 13-12-2004 à 18:56:54
où tu peux avoir deux cas, un où l'on a une chaine en ROM et une autre en RAM ?
Marsh Posté le 13-12-2004 à 19:01:04
alors je gére des chaines en RAM zero-power, en RAM, plus quelques constantes compressées (enfin je crois) en ROM.
elles font generalement moins de 32 caracteres, et les opérations sont ultra-basiques: strcpy, strncpy et strcmp.
ça répond à vos questions ou pas?
Marsh Posté le 13-12-2004 à 19:01:54
Taz a écrit : ben techniquement une classe ça te permet aussi de centraliser le code de tes traitement de strings alors, ça peut réduire ton .text |
je suis d'accord, mais si pour ça faut que j'embarque une lib de 10Ko, ça perd tres vite de son interet pour moi
Marsh Posté le 13-12-2004 à 19:04:17
ben ça pèse bien moins que ça. ça te permet de factoriser ton code et d'implémenter des mécanismes comme du COW
Marsh Posté le 13-12-2004 à 19:14:10
oki, j'essaierai à l'occas voir si ça passe ou pas.
Marsh Posté le 14-12-2004 à 10:23:05
yulara a écrit : |
Ca dépend des implémentations. Certaines utilisent le Copy On Write, d'autres ne font de l'allocation dynnamique que pour une longueur > 15, et toutes stockent la longueur de la chaine ce qui permet d'économiser les appels à strlen.
http://c.developpez.com/faq/cpp/?p [...] GS_lenteur
Marsh Posté le 14-12-2004 à 10:48:31
merci pour le lien
mais bon, le probleme est resolu, mon ancetre de compilo n'accepte pas l'include de STRING, il me fait un caca nerveux sur streambuf (probablement parce qu'il y a 9 caractères...)
Marsh Posté le 13-12-2004 à 15:53:13
Salut,
Je débute en c++, et j'ai un petit problème avec le destructeur d'une classe.Voici le constructeur :
int x, int y, char *nom sont des membres privés de ma classe.
Voici le destructeur :
Je suis sous visual C++. La compilation s'effectue sans problème. A l'exécution, le pgm plante lorsqu'il passe sur la ligne "delete []nom". Si qqun pouvait m'aider, merci.