Libérer la mémoire avec delete [C] - Programmation
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;
}
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]
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" )
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++
Marsh Posté le 02-11-2001 à 15:20:06
> char buffer[255]; /* buffer = pointeur */
> /*ou: buffer = (char *) malloc(sizeof(char) * 255);*/
> ...
> free(buffer)
warning: si t'utilises pas le malloc, alors le free plante
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) 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
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?