IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Réinitialisation


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut Réinitialisation
    Salut
    En fait je voudrai reinitialiser des donnees deja defini

    En gros je fais ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    While(...)
    {
       int a;
       struct sockaddr_in cadr;
     
       ////
       //calcul corp du programme
       /////
     
     
       //? reinitialisation de a et struct sockaddr_in cadr
    }

    Bon pour le a en fait c'est pas un probleme c surtout pour la structure c pas moi qui la cre je lutilise dans une librairie deja cree et je voudrai la reinitialiser un peu comme quand on fait un free (ou alors carrement leffacer).
    Pour les variables simple je sais le faire mais pour des struct ?

    Si kkun pe me dire

  2. #2
    Membre émérite

    Homme Profil pro
    Urbaniste
    Inscrit en
    mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    Par défaut
    Quand tu déclares la variable a avec : "int a;", sa valeur sera "indéfinie" = n'importe quoi. Certains compilateurs l'initialisent à zéro, mais pas tous (normal, ça consomme des ressources !). Le mieux est de faire "int a = 0;".

    Pour ta question, j'ai pas trop bien compris. Pour "restaurer" la valeur d'une variable, le mieux est de sauver sa valeur avant les calculs, puis remplacer la variable par son ancienne valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int a, sav_a;
    printf ("a = ? "); scanf ("%d",&a);
    sav_a = a;
    ...
    a = a*7;
    ...
    a = sav_a;
    Pour les structures, c'est pareil. Je crois qu'aujourd'hui tous les compilateurs permettent de copier intégralement une structure avec l'opérateur d'affection (a=b). Si ce n'est pas le cas, memcpy devrait convenir.

    Pas besoin de libérer la mémoire d'une structure, elle est allouée dans la "pile" du programme, et donc libérée automatiquement. Il n'en est pas de même avec les pointeurs comme dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <stdio.h>
    #include <assert.h> // assertions
     
    int *somme (int a, int b)
    {
      int *c = (int *)malloc (sizeof(int));
      assert (c != NULL); // si l'allocation échoue, génère une erreur puis termine le programme
      *c = a+b;
      return c;
    }
     
    int main()
    {
      int *x = NULL;
      c = somme(10, 30);
      printf ("somme = %d\n",*c);
      free (c); // <--- Ne pas l'oublier, sinon la mémoire ne sera JAMAIS libérée (sur la plupard des OS, sous les UNIX c'est mieux géré, à part quand ça commence à planter :-/)
      return 0;
    }
    @+ Haypo

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Merci

    mais en fait c pas trop ca que je veux faire:
    Je veux effacer totalement une struct puis la recreer

    WHILE( )
    {
    struct a;

    //programme

    //effacer carrement a puis il se recreer au debut de la boucle
    }

  4. #4
    Membre averti

    Inscrit en
    juin 2002
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 97
    Points : 300
    Points
    300
    Par défaut
    On peut utiliser les blocs {} pour contrôler la durée de vie des variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while&#40;...&#41;&#123;
    	//instructions ne disposant pas de a
    	&#123;
    		struct A a= &#123;...&#125;;
    		//instructions disposant de a
    	&#125;
    	//instructions ne disposant pas de a
    &#125;
    On peut maintenir un objet 'zero':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const struct A zeroA= {}; //{0} est requis par un certain compilateur non-standard
    struct A a= {argc};
    //....
    a= zeroA; //remise à 0
    On peut vider avec memset:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    struct A a;
    memset(&a,0,sizeof a);
    Il faut noter qu'il n'est pas garanti que ça mette les flottants à 0 et les pointeurs à NULL.

    On peut empaqueter ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define ZERORAW(a) memset(&(a),0,sizeof(a))
    ZERORAW(a);
    "J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone."-Bjarne Stroustrup
    www.stroustrup.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. réinitialiser un DBLookupCombobox
    Par piscine dans le forum Bases de données
    Réponses: 4
    Dernier message: 09/06/2007, 20h50
  2. Réinitialiser les valeurs d'un champ de type identify
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/01/2005, 14h39
  3. réinitialiser les liens d'une page html
    Par sisco dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/11/2004, 17h03
  4. réinitialiser clé primaire
    Par guegré dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 20/08/2004, 12h36
  5. réinitialisation de la scène
    Par aguion dans le forum OpenGL
    Réponses: 5
    Dernier message: 21/07/2004, 23h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo