Langage C allocation du mémoire(urgence)
nguyen
-
alicia85 Messages postés 68 Date d'inscription Statut Membre Dernière intervention -
alicia85 Messages postés 68 Date d'inscription Statut Membre Dernière intervention -
bonjour
j'ai un problème dans C. Si j'ai utilisé free au milieu de programme. il ne marche pas. Par exemple
h1=new (int);
h2=new(int);
afficher(h1);
free(h1);
afficher (h2);
free (h2);
Si free au milieu de ce programme, il ne marche pas. Il marche seulement à la fin.
Merci d'avance tous les réponses.
j'ai un problème dans C. Si j'ai utilisé free au milieu de programme. il ne marche pas. Par exemple
h1=new (int);
h2=new(int);
afficher(h1);
free(h1);
afficher (h2);
free (h2);
Si free au milieu de ce programme, il ne marche pas. Il marche seulement à la fin.
Merci d'avance tous les réponses.
A voir également:
- Langage C allocation du mémoire(urgence)
- Mémoire vive - Guide
- Langage ascii - Guide
- RAM : type, format, CAS, vitesse, tout sur la mémoire vive - Guide
- Langage binaire - Guide
- Nettoyer memoire iphone - Guide
10 réponses
Salut,
C'est clair que si tu utilises "new" en C tu auras des pb ;-)
Donc comme tu ne parles pas d'erreurs de compilation, je pense que tu dois très certainement compiler en C++. Dans ce cas il est fortement recommandé d'utiliser "delete" pour libérer ce qui a été alloué avec "new".
A++
C'est clair que si tu utilises "new" en C tu auras des pb ;-)
Donc comme tu ne parles pas d'erreurs de compilation, je pense que tu dois très certainement compiler en C++. Dans ce cas il est fortement recommandé d'utiliser "delete" pour libérer ce qui a été alloué avec "new".
A++
salut
Merci de ta réponse.
J'ai utilisé C++ chez moi. J'ai déjà essayé avec delette et free; mais tous les deux ne marchent pas.
Merci de ta réponse.
J'ai utilisé C++ chez moi. J'ai déjà essayé avec delette et free; mais tous les deux ne marchent pas.
huh..
pourtant quand tu va compiler un fichier source ecrit en c++ tu devrais pas avoir d'erreur si t'as fais comme ceci :
...
int *h1,h2;
h1=new int;
h2=new int;
afficher(h1); //en supossant que la fonction est declarer comme void afficher(int *)
delete h1;
afficher(h2);
delete h2;
...
bon idéalement t'aurais aussi stocké des valeur dans h1 et h2 meheheh :P
pourtant quand tu va compiler un fichier source ecrit en c++ tu devrais pas avoir d'erreur si t'as fais comme ceci :
...
int *h1,h2;
h1=new int;
h2=new int;
afficher(h1); //en supossant que la fonction est declarer comme void afficher(int *)
delete h1;
afficher(h2);
delete h2;
...
bon idéalement t'aurais aussi stocké des valeur dans h1 et h2 meheheh :P
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Slt
Merci de tous les réponses. C'est problème :
...
int *h1,h2;
h1=new int;
h2=new int;
afficher(h1);
delete h1; // ici delete ne marche pas, le processeur réponse : faut proceseur
afficher(h2);
delete h2; // ici delette marche bien, sans problème
...
C'est problème que si delete au milieu de programme, le complicateur est "mort"
merci d'avance de vos réponses (c'est urgence)
Merci de tous les réponses. C'est problème :
...
int *h1,h2;
h1=new int;
h2=new int;
afficher(h1);
delete h1; // ici delete ne marche pas, le processeur réponse : faut proceseur
afficher(h2);
delete h2; // ici delette marche bien, sans problème
...
C'est problème que si delete au milieu de programme, le complicateur est "mort"
merci d'avance de vos réponses (c'est urgence)
Bonjour
deux petites choses
ton code ne doit pas très bien compiler:
la variable h2 est déclarée en int et non int *
Comment d'apercois tu que "ca ne marche pas"? Pour info, le delete ne réinitialise pas la valeur du pointeur.
cdt
deux petites choses
ton code ne doit pas très bien compiler:
la variable h2 est déclarée en int et non int *
Comment d'apercois tu que "ca ne marche pas"? Pour info, le delete ne réinitialise pas la valeur du pointeur.
cdt
Slt
C'est une faute d'écrit.
je peux écrire int *h2;
mais ce n'est pas problème. J'ai déjà essayé plusieus solutions.
C'est problème que pour quoi je dois mettre delete ou free à la fin au programme. Si je mets au milieu, le complicateur réponse faut processeur.
Merci de tous vos réponses.
C'est une faute d'écrit.
je peux écrire int *h2;
mais ce n'est pas problème. J'ai déjà essayé plusieus solutions.
C'est problème que pour quoi je dois mettre delete ou free à la fin au programme. Si je mets au milieu, le complicateur réponse faut processeur.
Merci de tous vos réponses.
Bonjour
la règle est simple:
si tu alloues avec malloc tu désalloues avec free (C)
si tu alloues avec new tu désalloues avec delete (C++)
Par contre si tu fais un free ou un delete sur un pointeur non valide (null ou déjà désalloué) ca explose...
Par contre rien n'interdit de placer tes instructions ou tu veux dans ton programme.
Peux tu indiquer exactement ton message d'erreur?
Tu as un pb à la compilation ou à l'exécution?
cdt
la règle est simple:
si tu alloues avec malloc tu désalloues avec free (C)
si tu alloues avec new tu désalloues avec delete (C++)
Par contre si tu fais un free ou un delete sur un pointeur non valide (null ou déjà désalloué) ca explose...
Par contre rien n'interdit de placer tes instructions ou tu veux dans ton programme.
Peux tu indiquer exactement ton message d'erreur?
Tu as un pb à la compilation ou à l'exécution?
cdt
Salut nguyen,
je ne vois pas bien où est ton problème. J'ai écrit ceci est ça marche très bien :
#include <stdio.h>
#include <stdlib.h>
void afficher(int* c) {
printf("Valeur : %d\n", *c);
}
int main(void) {
int *h1,*h2;
h1=new int;
h2=new int;
*h1 = 10;
afficher(h1); //en supossant que la fonction est declarer comme void afficher(int *)
delete h1;
*h2 = 20;
afficher(h2);
delete h2;
system("PAUSE");
return 0;
}
J'utilise Dev C++ comme compilateur.
Quel est ton compilateur ?
je ne vois pas bien où est ton problème. J'ai écrit ceci est ça marche très bien :
#include <stdio.h>
#include <stdlib.h>
void afficher(int* c) {
printf("Valeur : %d\n", *c);
}
int main(void) {
int *h1,*h2;
h1=new int;
h2=new int;
*h1 = 10;
afficher(h1); //en supossant que la fonction est declarer comme void afficher(int *)
delete h1;
*h2 = 20;
afficher(h2);
delete h2;
system("PAUSE");
return 0;
}
J'utilise Dev C++ comme compilateur.
Quel est ton compilateur ?