Langage C allocation du mémoire(urgence)

Fermé
nguyen - 28 janv. 2005 à 14:21
alicia85 Messages postés 68 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 20 août 2009 - 28 mai 2008 à 11:05
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.
A voir également:

10 réponses

Ravachol Messages postés 566 Date d'inscription vendredi 5 mars 2004 Statut Membre Dernière intervention 30 octobre 2005 120
28 janv. 2005 à 15:15
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++
1
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.
0
Ravachol Messages postés 566 Date d'inscription vendredi 5 mars 2004 Statut Membre Dernière intervention 30 octobre 2005 120
28 janv. 2005 à 16:07
Tu peux donner un peu plus d'infos S.T.P. car là ça fait un peu short pour t'aider plus.

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

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)
0
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
0
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.
0
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
0
slolo2000 Messages postés 315 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 29 mai 2007 48
3 févr. 2005 à 13:54
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 ?
0
alicia85 Messages postés 68 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 20 août 2009
28 mai 2008 à 11:05
bjr svp j ai besoin d allouer de l espace memoire a une chaine de caractere comment faire ? merci dans mon code on m envoie les erreurs de segmentation .violation d'acces
merci
0