|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre à l'essai
![]() Tristan Étudiant Inscription : octobre 2012 Messages : 19 ![]() |
Bonjour à tous,
Décidément, j'ai de gros problèmes d'allocation mémoire. Je dois simuler un magasin et pour celà, je simule le comportement de chaque client par un thread et le comportement des caisses par trois threads (un par opération). Le Client remplit un tableau de taille fixe avec des nombres aléatoires, puis choisit parmi les quatre caisses celle dont la file d'attente est la moins remplie. L'accès au tableau comprenant les valeurs des files d'attente est réglé par un sémaphore. De plus, chaque caisse ne peut avoir que N/4 clients qui y attendent (N étant le nombre total de clients). En me basant sur mes précédentes aventures, j'obtiens ceci : (très long...) Code :
Exemple d'exécution (la fin de celle-ci) : Code :
Je travaille dessus depuis vendredi et commence sérieusement à en avoir marre (je suis désolé de mon manque de persévérance). Je me doute que le problème doit venir de ma fonction Client_sim, où je dois probablement mal utiliser un pointeur, mais même en reprenant tous mes pointeurs un par un, rien à faire. Je n'arrive pas à utiliser Valgrind qui pourtant pourrait probablement me sauver la vie, et j'avoue que je n'en peux plus. Si quelqu'un peut m'aider, je lui devrai une reconnaissance éternelle. Ci-joint le code du programme. Cordialement, Vrashnak |
||||
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Baptiste ROUSSELDéveloppeur Temps réel Embarqué Inscription : janvier 2011 Messages : 1 316 ![]() |
Tu fais un free sur une variable non allouée dynamiquement c'est viable ça ? Cela me paraît pas très propre. :/
Sinon je n'ai rien vu de suspect dans ton programme, as-tu tenté de le lancer avec gdb ou autre debugguer ?
__________________
|
|
|
10
|
|
|
#3 |
|
Membre habitué
![]() Allan Étudiant Inscription : août 2012 Messages : 82 ![]() |
Pour regarder les problèmes que tu as avec la mémoire valgrind c'est pas mal. Ça te permettra de voir si tu libères bien tout ce que tu as alloué.
|
|
|
10
|
|
|
#4 | ||||
|
Membre à l'essai
![]() Tristan Étudiant Inscription : octobre 2012 Messages : 19 ![]() |
Bonjour,
merci à vous de m'aider. J'ai retiré le free(C.chariot[]) comme tu me le proposes transgohan, mais ça n'a rien changé. J'ai aussi retiré le free(useless) dans mon main(), sans plus de résultats. Code :
Code :
Que m'indique valgrind ? Pourquoi ma fonction pthread_join ligne 145 ne marche-t-elle pas alors que j'applique la même syntaxe dans mes trois fonctions de calcul et que celles-ci ne posent aucun problème ? Merci d'avance, Vrashnak |
||||
|
00
|
|
|
#5 | |
![]() ![]() Patrick GonordEnseignant Chercheur Inscription : juin 2005 Messages : 5 488 ![]() |
Citation:
__________________
Publication : Concepts en C Mon avatar : Glenn Gould -------------------------------------------------------------------------- Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
|
|
|
|
10
|
|
|
#6 |
|
Membre à l'essai
![]() Tristan Étudiant Inscription : octobre 2012 Messages : 19 ![]() |
Merci à vous Diogène.
Effectivement, en n'inversant plus le thread et la variable qui est censée récupérer la "valeur" (bien qu'il ne renvoie rien), ça fonctionne tout de suite mieux. Encore merci à vous. Hop, problème résolu. |
|
00
|
Copyright © 2000-2013 - www.developpez.com