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 :

Ecriture à adresse donnée + décalage


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 120
    Par défaut Ecriture à adresse donnée + décalage
    Bonjour,

    voila 2 heures déjà que je suis bloqué sur un problème de compréhension des pointeurs.

    Voici mes types et variables (.h) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    struct fb  
    { 
      struct fb *next ;
    }; 
     
    char mem_heap[HEAP_SIZE];
     
    struct fb *TZL[MAX_INDEX+1];
    C'est la ligne commentée qui me pose problème (.c)
    A l'adresse de Zone, qui est un pointeur de structure à un champ, je stocke l'adresse suivante pour chainer des zones memoire (dans un grand tableau de char).
    Une adresse est codee sur 4 octets, et je cherche donc a ecrire 4 octets plus loin la taille de la zone, sur 4 octets egalement.
    Je pense que j'ai un problème de syntaxe ou de compréhension des pointeurs...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     size_t taille_bloc = 1;
            int indice = 0;
            struct fb *Zone = NULL;
     
    if (TZL[indice] != NULL) {
                    Zone = TZL[indice];
                    TZL[indice] = Zone->next;
                    Zone->next = NULL;
    //                *(&Zone + sizeof(struct fb *)) =  taille_bloc;
                    return Zone; 
            }
    Merci d'avance pour vos commentaires !! :-)

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 120
    Par défaut
    De manière générale, comment dois-je faire pour écrire à une adresse donnée de ce type de structure avec ou sans décalage? Et qu'est-ce que je peux y écrire ?

    merci beaucoup !

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 120
    Par défaut
    j'oubliais, j'obtiens le warning suivant :

    assignment makes pointer from integer without a cast

    je ne comprends pas très bien, je confonds avec "integer from pointer" qui m'aurait paru plus clair ici...

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Bonjour,

    En premiere remarque, pourrai ton avoir un code minimal de ce que tu as fait et qui reproduise le probleme.

    Voila ensuite ce que je remarque a chaud (je n'ai pas tester ton code car je voudrais savoir ce que tu y a mis. Je vais peut etre, en refaisant un projet, faire quelque chose de different qui va arranger le probleme).

    Ceci me chagrine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct fb *TZL[MAX_INDEX+1];
    Tu declare un pointeur vers un tableau de structure fb.
    Ensuite,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (TZL[indice] != NULL) {
                    Zone = TZL[indice];
    La, tu compare et assigne la premiere valeur du tableau ....
    Je ne suis pas sur a 100% mais a mon avis, c'est de la que vient un part (?) du probleme.

    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct fb TZL[MAX_INDEX+1];
    et regarde si cela marche (je crois que le warning provient de ceci en fait).

    A partir de la, tu dois reflechir a pourquoi tu as declarer ton tableau de cette maniere. Le pointeur est-il vraiment necessaire ? pourquoi l'as tu mis au debut ? ...

    Bref, essaye de comprende pourquoi tu assigne une adresse de structure au lieu de la structure elle meme.

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    En ce qui concerne le warning, on peut dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *(&Zone + sizeof(struct fb *)) =  taille_bloc;
    - Zone est un struct fb *
    - &Zone est un struct fb ** ainsi que &Zone + sizeof(struct fb *)
    - *(&Zone + sizeof(struct fb *)) est donc un struct fb *
    - Cette expression fait donc struct fb * = size_t (un entier non signé)
    et le compilateur a raison (comme toujours) : "assignment makes pointer from integer without a cast"

    Mais, je n'ai pas compris ce que tu voulais faire exactement avec ce code.

    Remarque:
    Voici mes types et variables (.h) :...
    Il ne faut pas définir de variables dans un .h , leur position normale est dans un .c. Un .h ne doit contenir que des définitions de type, des prototypes de fonctions, des #define,... et parfois des déclarations de variables mais en extern

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Par défaut
    Citation Envoyé par diogene Voir le message
    - &Zone est un struct fb ** ainsi que &Zone + sizeof(struct fb *)
    &Zone ne serait-il pas plutôt un struct fb * et si ça n'est pas le cas, qu'est ce qui te permet d'affirmer que c'est un struct fb **?
    Merci

Discussions similaires

  1. [VBA-E]Ecriture de données dans un fichier texte
    Par osito57 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 18/08/2017, 19h42
  2. Ecriture des données d'une table dans un fichier
    Par jeunot0108 dans le forum Forms
    Réponses: 3
    Dernier message: 13/08/2007, 12h49
  3. ecriture de données sur le port série
    Par sanatou dans le forum Windows
    Réponses: 2
    Dernier message: 20/12/2006, 18h09
  4. [CSV] Ecriture des données dans un fichier
    Par kagura dans le forum Langage
    Réponses: 3
    Dernier message: 07/11/2006, 22h55

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