KioskeaKioskeaCommentCaMarcheInscrivez-vous, c'est gratuit !
Samedi 17 mai 2008 - 22:03:39

Langage C allocation du mémoire(urgence)

Rechercher : dans
langage C allocation du mémoire(urgence)
par nguyen
 Fil de Discussions
Statut : Non résolu
vendredi 28 janvier 2005 à 14:21:48
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.
Répondre à nguyen  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Ravachol, le vendredi 28 janvier 2005 à 15:15:09 Fil de Discussions
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 pas parce qu'ils sont nombreux à avoir tort
qu'ils ont raison! (COLUCHE)
Répondre à Ravachol

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par nguyen, le vendredi 28 janvier 2005 à 15:34:48 Fil de Discussions
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.
Répondre à nguyen

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Ravachol, le vendredi 28 janvier 2005 à 16:07:30 Fil de Discussions
Tu peux donner un peu plus d'infos S.T.P. car là ça fait un peu short pour t'aider plus.

A++
C'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont raison! (COLUCHE)
Répondre à Ravachol

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par etienne, le vendredi 28 janvier 2005 à 23:17:30 Fil de Discussions
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
Répondre à etienne

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par tran, le mardi 1 février 2005 à 12:43:45 Fil de Discussions
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)
Répondre à tran

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par toto, le mardi 1 février 2005 à 13:51:21 Fil de Discussions
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
Répondre à toto

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par nguyen, le mardi 1 février 2005 à 14:00:37 Fil de Discussions
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.
Répondre à nguyen

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par toto, le jeudi 3 février 2005 à 13:47:46 Fil de Discussions
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
Répondre à toto

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par slolo2000, le jeudi 3 février 2005 à 13:54:39 Fil de Discussions 
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 ?
Répondre à slolo2000
Discussions pertinentes trouvées dans le forum
05/05 16h58[c]allocation memoire dans une fonctionProgrammation16/12 17h518
22/01 11h34[langage C] probleme sur allocation memoireProgrammation09/02 14h243
15/07 10h40allocation de memoire en langage C:suiteProgrammation17/07 11h391
12/07 16h01allocation de memoire en langage CProgrammation13/07 19h392
Plus de discussions sur « langage C allocation du mémoire(urgence) » Discussion en cours Discussion fermée Problème résolu
Répondre
Titre du message :
Votre pseudo:
Votre email :
Message: 
  •  
  •  
Options: Recevoir les réponses par mail.
 

Aide