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++Builder Discussion :

limitation fonction memmove


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    39
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 39
    Par d�faut limitation fonction memmove
    Bonjour,

    je rencontre un petit souci avec la fonction memmove.
    j'ai cr�� deux structures de type:
    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
     
    typedef struct {
           double date;
           float IBrut;
           float IFiltre;
           float ICapt;
           float TBrut;
        //   float TMicro;
     
    }TAB_VAL_VRAI;
     
     
    typedef struct {
           TAB_VAL_VRAI acquisitionMicro[nbrevaleurtabenregistreaqui];
           TAB_VAL_SIMUL simulation[nbrevaleurtabenregistreaqui];
     
    }ENREGISTREMENT;
    Mon but est de faire une LIFO donc j'utilise la fonction memmove :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
     memmove(&enregistrement.acquisitionMicro[0],&enregistrement.acquisitionMicro[1],sizeof (enregistrement.acquisitionMicro)-sizeof(enregistrement.acquisitionMicro[0]));//shifftage du tableau I
    Mon probleme est que le code tel qu'il est au dessus marche sans souci le shiftage est bon
    mais si je rajoute une variable dans la declaration de ma structure TAB_VAL_VRAI (exemple celle en commentaire)
    la fonction ne marche plus.
    la valeur enregistremet.acquisitionMicro[nbrevaleurtabenregistreaqui-1] est juste et toutes les autres passent � z�ro pendant le memmove.

    Pourquoi????? limitation de la fonction????

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    D�tails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par d�faut
    Salut, pour travailler avec des tableaux de structure ou de classe j'utilise la librairie STL, c'est d�j� installer avec BCB, pas besoin de rien t�l�charger. Si tu veux en savoir plus tu peux consulter le site suivant: http://www.msoe.edu/eecs/ce/courseinfo/stl

    PS: d�sol� de ne pas avoir r�pondu � ta question

  3. #3
    Membre �prouv�
    Inscrit en
    Mars 2002
    Messages
    105
    D�tails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 105
    Par d�faut
    Bonjour,

    si j'ai bien compris, le but est de d�caler les derniers �l�ments au d�but du tableau. Je propose cela :
    memmove(&enregistrement.acquisitionMicro[0],&enregistrement.acquisitionMicro[1],(nbrevaleurtabenregistreaqui-1)*sizeof(TAB_VAL_VRAI));
    On d�cale (n-1) �l�ments de taille (taille d'un �l�ment du tableau).

    D�sol�, je n'ai pas pu le tester, mais l'id�e est l�...

    Nicolas

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    D'une mani�re radicalement plus simple, en utilisant un index circulaire, dans le genre :

    Nombre d'objets dans le tableau
    Index d'un objet quelconque dans le tableau
    D�calage sur le suivant avec rotation (dernier+1 -> premier)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Index = (Index+1) % NbElements;
    Ca �vite toute recopie de blocs de m�moire (ce que tu fais) et tout rajout de classe pour superviser des objets cha�n�s (sans doute d'une mani�re circulaire)

    Si on utilise un nombre d'�l�ments 2^^, il suffit de remplacer le modulo par un masque :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    int NbElements = 8; // 2^^3
    int Mask = 8-1; //pour montrer le calcul du masque
    Index = (Index+1) & Mask; //plus rapide sans doute que modulo
    V�rifier quand m�me si cette solution est applicable dans ton cas !

    A plus !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    39
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 39
    Par d�faut
    bonjour,

    le prob n'est pas
    il se situe a la declaration des variables dans la structure
    si j'en ai cinq memmove marche
    si j'en rajoute un sixieme memmove ne marche plus
    moi pas comprendre pourquoi

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    Si tu as envie de copier des blocs m�moire, chez moi �a fonctionne tr�s bien avec MoveMemory (plus ou moins rapide que memmove ? mais sans renvoyer dest qui de toute fa�on est connu... [0]) mais pour le calcul du nombre de bytes je fais :

    taille d'un objet * nombre d'objets � d�placer donc :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    sizeof(TAB_VAL_VRAI) * (nbrevaleurtabenregistreaqui-1)
    Reste � savoir ce que signifie "rajouter un sixi�me"...

    A plus !

Discussions similaires

  1. [XL-2010] Limite fonction SI
    Par DYV007 dans le forum Excel
    R�ponses: 3
    Dernier message: 16/03/2015, 11h34
  2. Limitation Fonction Rename()
    Par gelwc dans le forum Langage
    R�ponses: 2
    Dernier message: 15/10/2010, 08h51
  3. Ma fonction memmove
    Par black_hole dans le forum D�buter
    R�ponses: 18
    Dernier message: 01/06/2008, 17h15
  4. Limiter fonctions system et exec
    Par Toufinet dans le forum Apache
    R�ponses: 2
    Dernier message: 18/07/2006, 19h41
  5. fonction sql "LIMIT" en interbase?
    Par GMI dans le forum InterBase
    R�ponses: 6
    Dernier message: 20/09/2004, 14h04

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