Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3320 connectés 

 


Dernière réponse
Sujet : [C] Libérer la mémoire avec delete
tanguy

mogi a écrit a écrit :

> char buffer[255]; /* buffer = pointeur */  
> /*ou: buffer = (char *) malloc(sizeof(char) * 255);*/  
> ...
> free(buffer)
 
:non:
warning: si t'utilises pas le malloc, alors le free plante  




 
exacte ! pourtant buffer est bien un pointeur.
mais aucun warning même en -Wall -pedantic -ansi
 
new va avec delete ( C++ )
et malloc (realloc, calloc) avec free ( C )
il ne faut pas mélanger les deux


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
tanguy

mogi a écrit a écrit :

> char buffer[255]; /* buffer = pointeur */  
> /*ou: buffer = (char *) malloc(sizeof(char) * 255);*/  
> ...
> free(buffer)
 
:non:
warning: si t'utilises pas le malloc, alors le free plante  




 
exacte ! pourtant buffer est bien un pointeur.
mais aucun warning même en -Wall -pedantic -ansi
 
new va avec delete ( C++ )
et malloc (realloc, calloc) avec free ( C )
il ne faut pas mélanger les deux

mogi > char buffer[255]; /* buffer = pointeur */  
> /*ou: buffer = (char *) malloc(sizeof(char) * 255);*/  
> ...
> free(buffer)
 
:non:
warning: si t'utilises pas le malloc, alors le free plante
tanguy delete est une fonction C++
 
en C la fonction pour liberer la memoire s'appelle free
pour "creer" un espace memoire il faut utiliser malloc en C (new c'est pour le C++)
 
il faut rester coherent et utiliser des fonctions C et non faire un melange de C et de C++, ca peux engendrer des pb.
 
sinon pour affecter copier des chaines de caracteres, strcpy c'est mieux ;)
 
 
 
char buffer[255]; /* buffer = pointeur */
/*ou: buffer = (char *) malloc(sizeof(char) * 255);*/
 
strcpy(buffer, "test" ); /* ou mieux: strncpy, plus secure */
printf("%s", buffer);
free(buffer);
 
ca fonctionne et c'est du C pur. tu confonds C et C++
bjbebert char *buffer = new char[255];
Tu declare une variable de type pointeur et l'initialise avec l'adresse d'une zone que tu alloues.
 
buffer = "test";
buffer pointe maintenant vers la zone memoire contenant "test".
(Et non, c'est pas une recopie de "test" vers la zone allouee).
Tu as perdu l'adresse de la zone allouee->fuite memoire
 
delete [] buffer
Tu libere la chaine "test" -> pas bon du tout.
 
Essaie plutot un strcpy(buffer, "test" )
verdoux

bkadoum a écrit a écrit :

 
 
ca crash apres, j'ai testé avec juste ce code, ca fait pareil:
 
void main()
{
char *buffer = new char[255];

buffer = "test";

printf("%s", buffer);

delete [] buffer;

}  




C'est pas bon.

 

[edtdd]--Message édité par Verdoux--[/edtdd]

bkadoum

n0mad a écrit a écrit :

Ca crashe avant ou après avoir affiché la chaine de caractères ?
 
Si ça crashe avant : c'est normal, ta chaine n'a pas de \0 terminateur.
 
Si ça crashe après, j'ai pas toutes les infos.  
 
 




 
ca crash apres, j'ai testé avec juste ce code, ca fait pareil:
 
void main()
{
char *buffer = new char[255];
 
buffer = "test";
 
printf("%s", buffer);
 
delete [] buffer;
}

bkadoum J'ai alloué de la mémoire pour un pointeur:
 
char *buffer = new char[255];
 
Ensuite j'affiche:
 
printf("%s", buffer);
 
Et quand j'ai affiché le contenu de buffer, je peux libérer la mémoire c'est ca? ou je me gourre?
 
delete [] buffer;
 
Malheureusement l'application crash, qu'ais-je fait de faux?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)