Les Structures

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 17 août 2005 à 09:21
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009 - 17 août 2005 à 12:46
Hep Hep Hep les gens :)

J'ai une question à propos des structures :)



Voyez vous j'en déclare une ainsi :

typedef struct hRaccourci

{

LPSTR lpName;

LPSTR lpShortPath;

hRaccourci *pNext;

}SHORTCUT;

typedef SHORTCUT* LPSHORTCUT;



Et j'ai donc une fonction Initialiser telle que :

void Initialiser(LPSHORTCUT lpRacc)

{

lpRacc->lpName = new char[MAX_PATH];

lpRacc->lpShortPath = new char[MAX_PATH];

lpRacc->pNext = NULL;

}



La question est :

Lorsque je fait LPSHORTCUT hRacc = new SHORTCUT;

Initialiser(hRacc);



est-ce-que je dois delete[] lpName et lpShortPath avant de delete mon objet ???

Ou est-ce-qu'en supprimant l'objet, le system se charge de tout faire ? :)


J'aime pas les fuites moi :p lol
void Aurevoir( void ); //Bonne journée

25 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
17 août 2005 à 09:50
Désalloue tout.

+2(p - n)
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 09:53
Tu fais du C ou du C++ ? Si tu fais tu C++ utilises à fond les possibilité du langage parce que la tu t'embetes pour rien.



#include <list>

#include <string>



struct SHORTCUT

{

std::string lpName;

std::string lpShortPath;



hRaccourci(name, short_path) : lpName(name), lpShortPath(short_path)

{}

};



std::list<SHORTCUT> shortcuts; // pour avoir une liste, mieux que cet horrible pNex !



Mais c'est peut etre nouveaux tout ca pour toi, dans ce cas fais du C et utilises malloc et free à la place de new/delete



typedef struct hRaccourci

{

char lpName[MAX_PATH]; /* si la taille est connue statiquement, l'allocation dynamique est inutile */

char lpShortPath [MAX_PATH];

hRaccourci *pNext;

}SHORTCUT, *LPSHORTCUT;



LPSHORTCUT Initialiser()


{


LPSHORTCUT lpRacc = malloc(sizeof *lpRacc);


if( ! lpRacc )


return NULL;


lpRacc->pNext = NULL;


return lpRacc;


}




void FreeShorcut(LPSHORTCUT lpRacc)


{


/* libere ce qu'il y a à liberer */


}



LPSHORTCUT hRacc = CreateShortcut();

...

FreeShorcut(hRacc);
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 09:54
LPSHORTCUT Initialiser() -> LPSHORTCUT CreateShortcut()
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 09:55
Ca marche :p

Merki bien :)
void Aurevoir( void ); //Bonne journée
0

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

Posez votre question
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
17 août 2005 à 09:56
(merci d'effacer le post précédent)

Utilise std::list<std::pair<std::string,std::string>>>. Ca te changera des listes chainées faites à la main ;-)
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
17 août 2005 à 09:57
Grilled....
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 09:58
Toutes les réponses d'un coup lol

So so so, en faite quand j'disais j'étais une quiche, j'étais sérieu lol

Je mélange C et C++ :)

Va falloir que je reprenne tout :p

Merci pour votre courage ::$
void Aurevoir( void ); //Bonne journée
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 10:01
Commence par faire un choix, mais la ou tu en est ca sera plus simple
de faire du C. Le C++ simplifie beaucoup de choses mais faut avoir un
minimun de théorie derriere , il faudrais te plonger dans un cours.
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 10:03
Ouai bé quand je vois les trucs des listes là lol

Ca me fait tout bizarre :)

J'vais rester avec le C pour l'instant lol :p

void Aurevoir( void ); //Bonne journée
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
17 août 2005 à 10:06
C'était pour te faire peur... mais le pire c'est que c'est bien ça.
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 10:06
Alors oublis new/delete, et je te conseilles de renommer des sources en
.c (si c'et en .cpp par exemple) pour que ton compilateur compile en C,
comme ca tu seras si tu mélange avec du C++.
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 10:08
std::list<std::pair<std::string,std::string>>> et c'est pas gentil de refiler des "syntax error"
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
17 août 2005 à 10:09
Steve, tombé dans une marmite remplie d'Orangina Rouge :-) Il est méchant...
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
17 août 2005 à 10:10
Rajoute des espaces et enlève le dernier >, je vais qd même pas t'expliquer la syntaxe du C++, pas à toi !?
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 10:15
C'etait pour rire, si tu file ca à un débutant il va rien comprendre quand le compilateur lui geulera dessus
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 août 2005 à 10:15
Mais vous êtes des fous lol :D

Tiens au faite, je compile en C :)

ça me fait des erreurs

il n'accepte pas les char* dans les param de fonction, c'est zarb lol

void Aurevoir( void ); //Bonne journée
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
17 août 2005 à 10:22
Montres le code qui foire.
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
17 août 2005 à 10:24
Jorky a franchi le point de non retour... condamné à tout faire en langage machine.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
17 août 2005 à 10:24
Utilises des const char tavariable[] plutot que des char * .

Shell
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 août 2005 à 10:44
Je suis de l'avis de steve, on ne peut passer aux fantaisie et abstractions du C++ QUE quand on maitrise le C sinon on restera un handicapé de la prog.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous