begin process at 2012 05 30 14:21:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

GUI

 > 

programme en pas à pas OK mais sinon arret


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

programme en pas à pas OK mais sinon arret

mardi 18 mai 2010 à 12:49:26 | programme en pas à pas OK mais sinon arret

aurhas

Bonjour,
je fais un programme à partir de bouts de codes que j'ai trouvés. Ce programme lis des données qui arrivent sur l'USB, les formate et les affiche dans une fenetre que je fais avec GTK+. La fonction de lecture est appelée périodiquement (g_timeout_add).
Mon problème est que ca plante quand je le lance normalement : program.exe a cessé de fonctionner. Quand je fais en débug sans point d'arrêt ca me donne : Program received signal SIGSEGV, Segmentation fault et les lignes correspondantes sont toujours les mêmes :
Code C/C++ :
save = *(p + data_offset + 2 * pMsg->len );
// autre code
*(p + data_offset + 2 * pMsg->len ) = save;

Cependant, quand je fais presque ligne par ligne, cela fonctionne bien.
Avez-vous une idée d'où ca peut venir ? A quoi sont dues en général ces erreurs ? est-il possible de remplacer ces lignes par autre chose de plus simple ? faut-il mettre des tempos ?
Merci d'avance de vos réponses
mardi 18 mai 2010 à 13:54:28 | Re : programme en pas à pas OK mais sinon arret

CptPingu

Administrateur CodeS-SourceS
Non, c'est juste un coup de chance que ça fonctionne en pas à pas.
Tu as du faire une erreur de mémoire (tu doit faire un débordement, ou écrire dans une zone non allouée ou déjà supprimée).

Aucun "tempo" n'est nécessaire, tu dois juste corriger ton code défectueux.

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
mardi 18 mai 2010 à 14:10:13 | Re : programme en pas à pas OK mais sinon arret

aurhas

Merci de votre réponse.
J'ai changé des lignes de cette fonction qui me pose problème. en fait entre les 2 lignes que j'ai écrites précédemment, il y a :
Code C/C++ :
if ( !( pMsg->flags & CANMSG_RTR ) ) {
    for ( i= MIN( pMsg->len, 8); i > 0; i-- ) {
      *(p + data_offset + 2 * (i-1) + 2 )= 0;
      sscanf( p + data_offset + 2 * (i-1), "%x", &val );
      pMsg->data[ i - 1 ] = val;
    }
  }

en fait je range, dans le champs data de pMsg (qui est un pointeur qu'on passe à cette fonction et dont le type est CANMsg), les données hexadécimales contenues dans p (qui est un pointeur vers la donnée que je reçois sur l'USB) (l'offset est de 5).
Quand j'enlève uniquement les lignes précédentes, j'ai une erreur identique sur la ligne
Code C/C++ :
*(p + data_offset + 2 * (i-1) + 2 )= 0;

Quand j'enlève les lignes qui me posaient problème tout à l'heure ainsi que la ligne *(p + data_offset + 2 * (i-1) + 2 )= 0;, j'ai une erreur semblable (en debug) mais liée à la fonction sscanf... je suppose que cela veut dire que l'adresse "p + data_offset + 2 * (i-1)" est incorrecte mais je ne comprends pas pourquoi. la donnée vers laquelle pointe p ressemble à "t140300451C3709\r". dans lequel len est le 5ème caractère.
le pointeur pointe vers une donnée disponible d'après ces lignes... ou pas ?
est-il possible d'écrire autrement les lignes qui posent problème ?
Merci d'avance.
mardi 18 mai 2010 à 14:24:39 | Re : programme en pas à pas OK mais sinon arret

CptPingu

Administrateur CodeS-SourceS

*(p + data_offset + 2 * (i-1) + 2 )= 0



Tu dois te poser plusieurs questions:
- Est-ce que la zone à l'adresse: p + data_offset + 2 * (i-1) + 2, est disponible ?
ou
- Est-ce que la zone à l'adresse: p + data_offset + 2 * (i-1) + 2 est alloué ?

Pour vérifier les erreurs mémoires, tu as un outil très pratique qui s'appelle "valgrind" (sous Linux, sous Windows il me semble que "purify" le fait aussi).

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
mardi 18 mai 2010 à 16:02:32 | Re : programme en pas à pas OK mais sinon arret

aurhas

merci encore.
je ne suis pas expert en c mais je pense que la zone pointée est disponible et allouée.
ca peut sembler bizarre, mais j'ai réussi à contourner le probleme.... avec des tempos.
du coup, mon programme est très lent mais fonctionne...
une idée du probleme ??
merci encore de votre aide.
mardi 18 mai 2010 à 16:04:12 | Re : programme en pas à pas OK mais sinon arret

CptPingu

Administrateur CodeS-SourceS
Ton programme, est-il multi-threadé ?

_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
mardi 18 mai 2010 à 16:28:00 | Re : programme en pas à pas OK mais sinon arret

aurhas

je ne sais pas le faire donc non sauf si je l'ai fait sans le vouloir...


Cette discussion est classée dans : programme, code, arret, ok, program


Répondre à ce message

Sujets en rapport avec ce message

arreter un autre programme !!! [ par FLOPPY ] je cherche un code en C qui permet de stopper un programme (autre que le mien) charger en memoire (si possible avec le code d'erreur que cette fonctio au secccoooouuuuuurrrrr protection d'un programme [ par zorque ] je suis entraint de faire un programmeet je voudrais le proteger comme les sharwarescomment faire pour ke le programme debloque les option si l'utilis récupérer code assembleur [ par none77 ] Bonjour,j'aimerai savoir si lorsque je programme en C il m'est possible de récupérer le code assembleur automatiquement.Je demande ca car je dois util Comment comparer des edit box ? [ par ephores ] Bonjour, voila je suis novice et je fais en MFC un petit soft qui doit comparer le contenue de 4 edit box. C'est une demande de code d'acces , il y a [C] Interdire l'accès à certaines touches [ par Cow_B ] SalutBon, cette fois ci mon souci est le suivant : je demande à un utilisateur de rentrer un chiffre kelkil soit. Le problème c'est que si la personne Aidez moi programme sur des liens hypertexes et ... [ par borower ] BonjoursJe suis un debutant et je n'arrive pas a mettre en forme un code convenable pour un programme.Je recherche le code source d'un programme en C Gestion de la mémoire ! [ par ZogStriP ] Je voudrais savoir si il existe un programme ou une fonction (qui marche sous windows XP) qui me permettrais de savoir exactement combien d'espace pre Une fenêtre vide = exe de 152 ko... [ par Inekman ] Salut tout le monde,Ca fait pas mal de temps que je lis des livres sur le C++ et donc je m'y suis mis réellement hier soir car j'ai enfin compris comm convertisseur c++ -->algo? [ par johanb ] bonjour à tous, j'aimerais savoir si quelqu'un connais un logiciel permettant de convertir du texte c++ en algo.En effet, j'ai réalisé un programme da convertir du code c++ en algorithmique? [ par johanb ] bonjour à tous, j'aimerais savoir si quelqu'un connais un logiciel permettant de convertir du code c++ en algo.En effet, j'ai réalisé un programme dan


Nos sponsors


Sondage...

Comparez les prix

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,608 sec (4)

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