probleme de free()

 
Poster un nouveau sujet   Répondre au sujet    iprelax.fr Index du Forum -> VC++ sous Windows
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
p0il
jeune mioche
jeune mioche


Inscrit le: 17 Avr 2002
Messages: 21
Localisation: Paris

MessagePosté le: Jeu Sep 05, 2002 11:27 am    Sujet du message: probleme de free() Répondre en citant

Hello all !

Alors, cette rentree ???


J'ai une question a propos du free() en C...


si je ne me trmope, l'utilisation classique est

{
char * chaine;
chaine=new char[10];
// on s'amuse avec chaine
free(chaine);
}


jusque la ok


mais apres, si je fais ca :


{
char * chaine;

chaine=new char[10];
chaine=&chaine[3];

free(chaine);
}



est ce que ca va liberer les 10 octets que j'avais alloue au debut, ou alors est ce que ca va liberer 10 octets a partir de l'adresse memoire chaine (donc 3 octets qui ne m'appartiennent pas...), ou est ce qu'il va juste liberer 7 octets ??
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Salemioche
salemioche
salemioche


Inscrit le: 05 Avr 2002
Messages: 350
Localisation: FR- BIOT

MessagePosté le: Jeu Sep 05, 2002 11:38 am    Sujet du message: Répondre en citant

excellent de se poser des questions sur le C Very Happy

void free(void *ptr);

la fonction free rend ( desalloue) au systeme la zone pointée par ptr. si ptr est null aucune action n'est executée par free. si ptr a deja ete desalloue ou si ptr ne correspond a aucune valeur de pointeur precedemment alloué par malloc ( ou new dans ton cas ), c'est une erreur
qui se traduit a l'execution par un comportement imprevisible du systeme.

j'imagine que selon les compilo/OS ca fait pas toujours pareil, mais C pas un truc a faire Confused

Idea as tu pensé a un garbage collector pour te simplifier la vie Idea
_________________
Creer son site - Hebergement - Jumeaux
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Yahoo Messenger MSN Messenger
p0il
jeune mioche
jeune mioche


Inscrit le: 17 Avr 2002
Messages: 21
Localisation: Paris

MessagePosté le: Jeu Sep 05, 2002 11:45 am    Sujet du message: Répondre en citant

oui, c'est vrai que pour ca le java ca dechire....


enfin bon, ca me parait un peu complique de faire un garbage collector pour juste une dizaine d'alloc / desalloc...


en tout ca, merci pour la reponse, ca m'eclairci les idees !!!
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Salemioche
salemioche
salemioche


Inscrit le: 05 Avr 2002
Messages: 350
Localisation: FR- BIOT

MessagePosté le: Jeu Sep 05, 2002 11:50 am    Sujet du message: Répondre en citant

pour une dizaine c'est sur que ca vaut pas forcement le coup sinon,
il ya le gc de boehm, la reference :

http://www.hpl.hp.com/personal/Hans_Boehm/gc/
_________________
Creer son site - Hebergement - Jumeaux
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Yahoo Messenger MSN Messenger
p0il
jeune mioche
jeune mioche


Inscrit le: 17 Avr 2002
Messages: 21
Localisation: Paris

MessagePosté le: Mer Sep 11, 2002 5:33 pm    Sujet du message: Répondre en citant

Hello, me revoila !

J'ai une autre question...

je fais ca : (et ce ce qu'on m'a appris !)


{
string * toto;

toto=new string[3];
.
.
delete [] toto;
}


les [] dans la derniere ligne car toto est un tableau !!


mais j'en viens a me demander...

dans

{
char * toto;

toto=new char[3];
.
.
delete toto;
}


on mets pas les [] parce que c'est un type de donnee et pas un objet ou est ce qu'il y a une grosse erreure ??


merci d'avance !!
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Salemioche
salemioche
salemioche


Inscrit le: 05 Avr 2002
Messages: 350
Localisation: FR- BIOT

MessagePosté le: Mer Sep 11, 2002 5:50 pm    Sujet du message: Répondre en citant

delete [] permet d'appeler le destructeur de chaque element du tableau
C inutile pour un char

de meme new CLASSE[n], va créer un tableau de n object de la classe CLASSE et pour chaque element appeler le constructeur par defaut ( qui doit absolument etre present )

alors que new type[] renvoie un pointeur sur type : type *

j'ai beaucoup de plaisir a repondre a tes questions ( ca me fait reviser)mais je peux te conseiller une saine lecture : 'le langage C++' de bjarne stroustrup
C la bible quand on a un ptit trou de memoire

a bientot,
_________________
Creer son site - Hebergement - Jumeaux
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Yahoo Messenger MSN Messenger
ttbidouille
jeune mioche
jeune mioche


Inscrit le: 21 Juin 2002
Messages: 10

MessagePosté le: Mer Déc 04, 2002 6:19 pm    Sujet du message: Répondre en citant

char *pChaine ;
pChaine= new char(256) ;

....

delete [] pChaine ;


pour allouer un tableaux de 256 caracteres , il faux mieux utiliser delete apres new

ttbidouille
_________________
ttbidouille@yahoo.com
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un email
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    iprelax.fr Index du Forum -> VC++ sous Windows Toutes les heures sont au format CET (Europe)
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum
Affilzen SARL : Mention légale