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

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°68931
bkadoum
Posté le 01-11-2001 à 14:55:31  profilanswer
 

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?

mood
Publicité
Posté le 01-11-2001 à 14:55:31  profilanswer
 

n°68938
bkadoum
Posté le 01-11-2001 à 15:27:43  profilanswer
 

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

n°68939
verdoux
And I'm still waiting
Posté le 01-11-2001 à 15:30:01  profilanswer
 

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]

n°68943
bjbebert
Posté le 01-11-2001 à 16:01:46  profilanswer
 

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

n°69124
tanguy
Posté le 02-11-2001 à 14:47:42  profilanswer
 

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

n°69136
mogi
Posté le 02-11-2001 à 15:20:06  profilanswer
 

> 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

n°69268
tanguy
Posté le 02-11-2001 à 23:56:44  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

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

 

Sujets relatifs
[porg sous Win] urgent (pb de memoire)Peut-ont connaitre l'occupation mémoire d'un pc avec javascript ?
[PHP] problème avec la requête DELETE FROM.allocation memoire vs affectation
Calculatrice Casio : rentrer ds la memoire....AIDEZ MOI POUR MON MEMOIRE!
[COM/C++]Passage de paramètres et allocation de mémoire[C++] New/Delete
Help !!! Comment fait-on pour killer une dll de la memoire sous W98Gestion mémoire et Pointeurs
Plus de sujets relatifs à : [C] Libérer la mémoire avec delete


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR