Pourquoi definir deux fois une structure de type packetRec ?
struct packetRec *packet;
et une autre
static struct packetRec const tmp = {0};
Pourquoi definir deux fois une structure de type packetRec ?
struct packetRec *packet;
et une autre
static struct packetRec const tmp = {0};
c'est la seule méthode portable pour initialiser une structure avec des valeurs par défaut (0 pour les entiers, 0.0 pour les flottants, NULL pour les pointeurs).
Code : Sélectionner tout - Visualiser dans une fenêtre à part struct packetRec tmp = {0};
Donc une fois qu'on a notre structure de référence correctement initialisée (tmp), on fait une simple affectation
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part *packet = tmp;
"The quieter you become, the more you are able to hear"
"Plus vous êtes silencieux, plus vous êtes capable d'entendre"
merci, c'est devenu plus clair pour moi ! Et j'espere que ca reglera ce probleme de Segmentation
Il réside toujours une erreur de segmentation ... Ca plante toujours juste avant de faire le free (packet->data)
sniff
Il y a toujours ce problème là :
Code : Sélectionner tout - Visualiser dans une fenêtre à part memcpy((void*)packet, (const void*)recbuf, nbCaractere);
"The quieter you become, the more you are able to hear"
"Plus vous êtes silencieux, plus vous êtes capable d'entendre"
Je vais copier les elements un a un de mon tableau recbuf[] dans les champs de mon packet alors ... Ca reglera le probleme du memcpy ...
Voila, j'ai modifié le
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 memcpy((void*)packet, (const void*)recbuf, nbCaractere);
et il n'y a plus d'erreur de segmentation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 packet->control = recbuf[0]; packet->lenght = recbuf[1]; packet->checksum = (unsigned short)(recbuf[2] + (256 * recbuf[3])); packet->id = (unsigned short)(recbuf[4] + (256 * recbuf[5])); strcpy(packet->data, &recbuf[6]);
merci de votre aide ... En espéran maintenant que le programme a un comportement normale :p
Super ... Maintenant c'est mon calcul de checksum qui ne tombe plus bon ... :'( depuis que l'on a changé le memcpy :'( ...
Une idée de pourquoi le checksum ne tombe plus bon ? avec les modifications qui ont été effectuée sur la facon de travailler ?
Bon apparement ca serait ma facon de copier mon tableau dans ma chaine de caractere data ... Est ce que vous avez une solution autre pour le faire ?
Merci de votre compréhension et de votre aide !
ça n'a rien à voir mais il y a un problème de type ici :
sendbuf est un tableau de unsigned char et loginfo attend un tableau de char.
Code : Sélectionner tout - Visualiser dans une fenêtre à part else loginfo(sendbuf, nbCaractere, 1);
Autrement à quoi servent les variables "stop", "paramLv" et "statusAndMeasure"?
"The quieter you become, the more you are able to hear"
"Plus vous êtes silencieux, plus vous êtes capable d'entendre"
Pour les tableaux, on peut changer le type ... Je ne me suis jamais posé la question puisque quand je compile ca ne me met ni d'erreur ni de warning et quand je regarde le log qu'il m'a créée et bien le packet est inscrit correctement dedans !
Enfait pour les variables, le code que je devellope est fait pour etre compilé en tant que .so pour l'intégrer dans un projet LabVIEW (si tu connais) et donc stop, paramLv et statusAndMeasure sont des variables passée a la dll sous forme de pointeur ... J'espere que j'aurai été assez clair pour que tu puisse me comprendre
Sous windows ... Donc ou le code fonctionnait et qui fonctionne toujours, c'est un Windows XP avec Dev-Cpp comme compileur (qui utilise gcc) ...
Now je boss sous linux et je tourne sous une CentOS 5 et je compile a l'aide de GCC ...
Et comment as tu réglé GCC? quels paramètres lui passes tu?
"The quieter you become, the more you are able to hear"
"Plus vous êtes silencieux, plus vous êtes capable d'entendre"
heu tout simplement
gcc monFichier.c -o monExecutable
c'est la ligne que je tape pour compilay
Un petit tour sur le site d'Emmanuel s'impose : http://emmanuel-delahaye.developpez....tm#cfg_compilo
"The quieter you become, the more you are able to hear"
"Plus vous êtes silencieux, plus vous êtes capable d'entendre"
Il faut rajouter toute la ligne ?
-Wall -Wextra -ansi -O -Wwrite-strings -Wstrict-prototypes -Wuninitialized
-Wunreachable-code
ou juste -Wall suffit ?
Une idée du pourquoi le checksum ne se calcule par correctement ?
C'est surment un probleme de copie du buffer de reception de message dans ma chaine de caractere dans ma structure ...
(effectivement quand je rajoute -Wall il m'indique un Warning )
-Wall ne suffit pas: Il faut mettre toute la ligne.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Avec toute la ligne ca va me chercher des erreurs dans les fichiers header ... genre string.h .... J'viens bien passer du temps a debugger mais pas ca en plus ... Lol ^^
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager