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 :

[struct][memcopy] mauvais passage de paramètre [Débutant(e)]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Par défaut [struct][memcopy] mauvais passage de paramètre
    bonjour

    Mon problème est que je n'arrive pas a faire de memcpy avec un pointeur sur une structure

    J'ai une structure déclarée en typedef
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct monFlux15{
    	char C_ADH_15[8];
    	char C_ID_15[2];
    	char CODERR_15[1];
    	char BDDERR_15[9];
    }*MONFLUX15;
    Puis une fonction où tout se passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void maFonction (char * param1){
    struct Response f15Response;
    MONFLUX15 f15;
    f15=(MONFLUX15)param1;
    ...
    Donc je fait pointé f15 sur mon param1
    et ma structure f15Response est initialisé après dans la fonction.

    Arrive le moment fatidique où je veux remplir f15 .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy(f15.C_ID_15,f15Response.ID,sizeof(f15->C_ID_15));
    Donc ce qui me bloque c'est : f15.C_ID_15 qui est surement pas possible.
    (j'avoue avoir à peu près essayer toutes les combinaisons )

    SI quelqu'un pouvait m'expliquer la bonne marche à suivre pour passer le bon paramètre le remercie d'avance

  2. #2
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Hello,

    Citation Envoyé par grelon
    J'ai une structure déclarée en typedef
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct monFlux15{
    	char C_ADH_15[8];
    	char C_ID_15[2];
    	char CODERR_15[1];
    	char BDDERR_15[9];
    }*MONFLUX15;
    Attention, un alias de la sorte cache le fait que MONFLUX15 est un type pointeur. Et sur le coup tu en fais les frais.

    Citation Envoyé par grelon
    Arrive le moment fatidique où je veux remplir f15 .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy(f15.C_ID_15,f15Response.ID,sizeof(f15->C_ID_15));
    f15 est de type MONFLUX15 qui est la même chose que type pointeur vers struct monFlux15. Donc, f15-> et pas f15.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy(f15->C_ID_15, f15Response.ID ,sizeof(f15->C_ID_15));
    Sinon, comme sizeof(char) vaut 1 dans tous les cas, le sizeof(f15->C_ID_15) est correct mais peut être piégeux à l'avenir si il y a avait un changement de type.

    A+

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Par défaut
    Ben ca je l'ai déja tester mais ca plante, quand je lance le debuggage avec visual studio c++ j'obtient:
    Exception non gérée à 0x10231f5c dans flux15.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x0045996d.
    Et quand je regarde la valeur de f15->C_ID_15, il a non pas la valeur de f15Response.ID mais un bout de code de l'envellope soap

    (f15Reponse est la structure que je passe en paramètre pour obtenir les résultat de l'appel d'une une fonction genérée par gsoap)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    soap_call_ns1__F15Function(soap,soap_endpoint,soap_action,id,f15Response) == SOAP_OK
    Et pourant j'affiche la valeur de f15Response.ID et le résultat obtenu et correct

    Je bloque

  4. #4
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Par défaut Probleme résolu
    En fait tout venait de ma variable param1 qui était mal initialisé ( taille trop petite par rapport a ma structure).

    Merci Foobar1329 car ta réponse ma permi de savoir que le problème ne venait pas directement du memcpy (f15->ID) et du coup mieu localiser mon erreur

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

Discussions similaires

  1. [Forms]Passage de paramètre entre Forms et Reports
    Par jack554 dans le forum Reports
    Réponses: 4
    Dernier message: 30/03/2004, 13h58
  2. probleme lors du passage de paramètre
    Par maxmj dans le forum ASP
    Réponses: 4
    Dernier message: 18/11/2003, 00h15
  3. [XSL] Passage de paramètres à un template
    Par pantin dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/06/2003, 13h28
  4. passage de paramètres
    Par pram dans le forum XMLRAD
    Réponses: 5
    Dernier message: 18/02/2003, 17h28
  5. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47

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