begin process at 2012 05 29 19:02:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

Pb _beginthreadex et manipulation de char* ou TCHAR


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pb _beginthreadex et manipulation de char* ou TCHAR

mardi 14 mars 2006 à 14:54:16 | Pb _beginthreadex et manipulation de char* ou TCHAR

grajovski

Hello,

Je développe une application impliquant plusieurs thread (port COM + calcul scientifique temps réel), bref un beau merdier. Tout allait bien jusqu'à ce que j'utilise la structure suivante :

struct COMMAND
{
    COMMAND* prev;
    HWND    hwnd;
    BYTE    type;
    double    s;
    double    t;
    USHORT    k;
    DWORD    timer;
    DWORD    tick;
    TCHAR    sz[64];
    CHAR    c;
    LONG    l;
    double    v;
    COMMAND* next;
};

Dès lors que dans un thread j'utilise des pointeurs COMMAND* pcmd et manipule des chaîne de caractères notamment via  strcpy et sprintf le prog perd les pédales et attribue de nouvelles adresses aux pointeurs ???

ex:

COMMAND* Populate( COMMAND* pcmd, HWND hWnd, BYTE type, double t, double s, USHORT k, DWORD timer, LPSTR sz, CHAR c, LONG l )
{
    pcmd->type    = type;
    pcmd->t        = t;
    pcmd->s        = s;
    pcmd->k        = k;
    pcmd->timer    = timer;
    pcmd->tick    = timeGetTime();
    if( sz )
        strcpy( pcmd->sz, sz );
    else
        strcpy( pcmd->sz, _T("") );
    pcmd->c        = c;
    pcmd->l        = l;
//    pcmd->next    = (COMMAND*) malloc( sizeof( COMMAND ) );
    pcmd->next    = (COMMAND*) HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof( COMMAND ) );
    pcmd->next->prev    = pcmd;

    char str1[64];
    int i = sprintf(  str1,"%s %d", sz, k );

    return pcmd->next;
}


Si je supprime la ligne "
int i = sprintf( string,"%s %d", sz, k ); " tout rentre dans l'ordre (ou presque)  et c'est ainsi pour toutes les fonctions appelées depuis un thread.

JE NE COMPRENDS PAS POURQUOI ET SURTOUT COMMENT Y REMEDIER !

HELPPPP 


mardi 14 mars 2006 à 15:09:34 | Re : Pb _beginthreadex et manipulation de char* ou TCHAR

grajovski

Ok, pb résolu en 2mn après avoir posté le msg, alors que je cherchais depuis 2j. Dans le cas de structure chaînées (se pointant les uns les autres) il vaut mieux utiliser :

int _snprintf( char *buffer, size_t count, const char *format [, argument] ... );

qui sécurise la procédure d'écriture de chaîne de caractère et ne déborde pas sur le reste de la mémoire.

Dans mon cas sprintf débordait sur l'élément "COMMAND* next" de la structure COMMAND et y inscrivait n'importe quoi d'où le perdage de pédale...

Bref, youpi.
mardi 14 mars 2006 à 15:24:46 | Re : Pb _beginthreadex et manipulation de char* ou TCHAR

BruNews

Administrateur CodeS-SourceS
Essaie aussi d'aligner correctement les membres de la structure COMMAND, t'évitera de bouufer de la mémoire inutilement.

ciao...
[ Lien ]
BruNews, MVP VC++
mardi 14 mars 2006 à 15:52:16 | Re : Pb _beginthreadex et manipulation de char* ou TCHAR

BruNews

Administrateur CodeS-SourceS

typedef struct _COMMAND {
  _COMMAND *prev;
  HWND    hwnd;
  BYTE    type;
  double    s;
  double    t;
  USHORT    k;
  DWORD    timer;
  DWORD    tick;
  TCHAR    sz[64];
  CHAR    c;
  LONG    l;
  double    v;
  _COMMAND* next;
} COMMAND;

// REFAITE CORRECTEMENT ALIGNEE
typedef struct _COMMANDA {
  double    s;
  double    t;
  double    v;
  _COMMANDA* prev;
  _COMMANDA* next;
  HWND    hwnd;
  DWORD    timer;
  DWORD    tick;
  LONG    l;
  USHORT    k;
  TCHAR    sz[64];
  CHAR    c;
  BYTE    type;
} COMMANDA;

sizeof(COMMAND) = 136
sizeof(COMMANDA) = 120

UNICODE:
sizeof(COMMAND) = 200
sizeof(COMMANDA) = 184

ciao...
[ Lien ]
BruNews, MVP VC++

jeudi 16 mars 2006 à 17:05:35 | Re : Pb _beginthreadex et manipulation de char* ou TCHAR

grajovski

Ok, merci !


Cette discussion est classée dans : char, double, command, sz, pcmd


Répondre à ce message

Sujets en rapport avec ce message

Blème avec command system [ par pprod ] salut,je suis en train de faire un prog qui envoye un message net send avec la command dos mais j'ai un petit problème car je n'arive pas a trouver un double --> char[] [ par coockiesch ] Hello.Je cherche à passer un double dans une chaine de caractères. J'au utilisé "sprintf(char[], "%f", double)" mais elle ne revoie pas toutes les déc CONVERSION DOUBLE CHAR [ par DeAtHCrAsH ] Salut,J'ai un ptit pb... Je suis debutant et j'ai un ptit prob...Je veux utiliser la fonction atof mais quand je compile ca me dit : undeclared identi comment faire insérer du 'char' dans un tableau de 'double' [ par felisk ] J'ai créé un tableau où je stocke des valeurs de type 'double', j'aimerai dans les prières ligne de ce tableau insérer quelques lignes de commentaires Décomposition d'un Double en 4 variables Char [ par raidentr ] Un petit Pb Mathématique :Comment à partir un Double (exemple 0xAABBCCDD), je peux obtenir les 4 valeur de chaque octet :char var1=0xAAchar var2=0xBB Char en Double [ par DeAtHCrAsH ] Je dispose d'une chaine de de caractere representant un nombre.Seuleument se nombre est grand! Un nombre composer de 15 entier (ex: 123456789123456)!C Lecture d'un fichier quelconque [ par jb60 ] Bonjour,J'aimerais savoir si il est possible de lire les données d'un fichier quelconque lorsqu'on ne connait pas le format du fichier d'origine... Je Conversion char -> double [ par titpeste ] Bonjour,je manipule des doubles avec 20 chiffres a peu pres derriere la virgule.Ils sont stockés dans des chaines de caracteres.Mais lorsque je fais u convertir double en char [ par nonyus ] SVP, comment convertir un double en char???Merci pour vos reponses. Conversion char -> double [ par obby ] Bonjour,   J'ai un petit souci, j'utilise la fonction atof() pour faire la conversion d'une chaine de caractère (ex : ".00000E+00") vers un double. C


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales