[C] Libérer la mémoire avec delete

Libérer la mémoire avec delete [C] - Programmation

Marsh Posté le 01-11-2001 à 14:55:31    

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?

Reply

Marsh Posté le 01-11-2001 à 14:55:31   

Reply

Marsh Posté le 01-11-2001 à 15:27:43    

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;
}

Reply

Marsh Posté le 01-11-2001 à 15:30:01    

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]

Reply

Marsh Posté le 01-11-2001 à 16:01:46    

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" )

Reply

Marsh Posté le 02-11-2001 à 14:47:42    

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++

Reply

Marsh Posté le 02-11-2001 à 15:20:06    

> 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

Reply

Marsh Posté le 02-11-2001 à 23:56:44    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed