Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
p0il jeune mioche

Inscrit le: 17 Avr 2002 Messages: 21 Localisation: Paris
|
Posté le: Jeu Sep 05, 2002 11:27 am Sujet du message: probleme de free() |
|
|
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 |
|
 |
Salemioche salemioche


Inscrit le: 05 Avr 2002 Messages: 350 Localisation: FR- BIOT
|
Posté le: Jeu Sep 05, 2002 11:38 am Sujet du message: |
|
|
excellent de se poser des questions sur le C
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
as tu pensé a un garbage collector pour te simplifier la vie  _________________ Creer son site - Hebergement - Jumeaux |
|
Revenir en haut |
|
 |
p0il jeune mioche

Inscrit le: 17 Avr 2002 Messages: 21 Localisation: Paris
|
Posté le: Jeu Sep 05, 2002 11:45 am Sujet du message: |
|
|
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 |
|
 |
Salemioche salemioche


Inscrit le: 05 Avr 2002 Messages: 350 Localisation: FR- BIOT
|
|
Revenir en haut |
|
 |
p0il jeune mioche

Inscrit le: 17 Avr 2002 Messages: 21 Localisation: Paris
|
Posté le: Mer Sep 11, 2002 5:33 pm Sujet du message: |
|
|
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 |
|
 |
Salemioche salemioche


Inscrit le: 05 Avr 2002 Messages: 350 Localisation: FR- BIOT
|
Posté le: Mer Sep 11, 2002 5:50 pm Sujet du message: |
|
|
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 |
|
 |
ttbidouille jeune mioche

Inscrit le: 21 Juin 2002 Messages: 10
|
Posté le: Mer Déc 04, 2002 6:19 pm Sujet du message: |
|
|
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 |
|
 |
|