Kellog
Messages postés7Date d'inscriptionlundi 10 février 2014StatutMembreDernière intervention11 février 2014
-
Modifié par BunoCS le 10/02/2014 à 11:43
Kellog
Messages postés7Date d'inscriptionlundi 10 février 2014StatutMembreDernière intervention11 février 2014
-
11 févr. 2014 à 18:25
Bonjour,
Bonsoir,
J'essaie de réaliser un tp et le code que j'ai écrit compile bien (a priori) mais à chaque fois que je veux lancer le programme, il m'affiche cette erreur : thread 1 exc_bad_access (code=1 address=0x0)
Etant débutant sur c++, je ne sais pas comment l'interpréter...quelqu'un pourrait-il m'aider svp ?
Voilà un bout de code ou le message s'affiche : c'est la dernière ligne...
Kellog
Messages postés7Date d'inscriptionlundi 10 février 2014StatutMembreDernière intervention11 février 2014 10 févr. 2014 à 10:57
Merci pour les balises code. Au fait quand je le compile et que je le lance il me sort : "build succeeded" mais il me souligne la dernière ligne du bout que j'ai copié en vert avec le message d'erreur thread 1 exc bad access
Au fait quand je le compile et que je le lance il me sort : "build succeeded"
"Compiler" ne veut pas dire "Fonctionner" jeune Padawan :D
bad access
veut dire que tu essaies d'accéder à quelque chose qui n'existe pas: variable non initialisée, index en dehors d'un tableau/vecteur/liste, etc.
Regardes par exemple si W et /ou I_T ne sont pas NULL.
que j'ai copié en vert
Pas vu...
Quelques conseils:
- utilises des noms de variable parlants
- "abuses" des commentaires, c'est super pratique
@+
Buno, Modo CS-CCM
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
The urgent is done, the impossible is underway. For miracles, envisage a time ...
Kellog
Messages postés7Date d'inscriptionlundi 10 février 2014StatutMembreDernière intervention11 février 2014 10 févr. 2014 à 11:30
Je voulais attendre que ça fonctionne pour mettre tous les commentaires ( c'est un projet que je dois rendre )...
Comment verifier qu'ils ne sont pas NULL ? (j'avais vérifier pour les index à cause d'un autre problème similaire que j'ai pu résoudre)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Je voulais attendre que ça fonctionne pour mettre tous les commentaires ( c'est un projet que je dois rendre )...
C'est ce que l'on dit toujours, mais soit on a la flemme, soit on a pas le temps de le faire. Un bon réflexe est de commenter son code au fur et à mesure .
Comment verifier qu'ils ne sont pas NULL
if (W != NULL && W.size() != 0) {
//...
}
Le 1er test va tester la validité de ta variable. Le 2nd vérifie qu'il y a bien des éléments dedans.
@+
Buno, Modo CS-CCM
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
The urgent is done, the impossible is underway. For miracles, envisage a time ...
Merci pour le conseil.
J'ai mis une constante à la place de la formule de payoff (j'ai mis zéro) et là ça m'affiche un résultat ça confirme ce que le problème vient de W...
Pour le premier test de l'instruction que tu m'as donnée, c'est affiché : invalid operands to binary expression ( vector... And long)
Mais la deuxième instruction est confirmée W.size() = 0
Donc voilà. Il faut que tu regardes pourquoi ta méthode
A.PayoffCall(S_T,K,a)
ne retourne rien.
@+
Buno, Modo CS-CCM
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
The urgent is done, the impossible is underway. For miracles, envisage a time ...
Kellog
Messages postés7Date d'inscriptionlundi 10 février 2014StatutMembreDernière intervention11 février 2014 10 févr. 2014 à 12:27
Grâce à tes instructions je pense avoir trouvé mon erreur....
Quand je créé vector<vector<double> > A;
Si je fais A.size() ça me retourne le nombre de lignes x le nombre de colonnes ?
Je viens ajouter ici quelques conseils classiques:
- Évite absolument les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
- On préfère 0 à NULL (ou mieux nullptr), voir: http://0217021.free.fr/portfolio/axel.berardino/articles/null-en-cpp
- Quand on utilise un std::vector, on préfère utiliser les "iterators" plutôt que d'utiliser des bornes fixes à l'arrache (justement pour éviter les problèmes que tu rencontres en ce moment).
Ceci:
std::vector<double> tab;
for (int i = 0; i < d; ++i)
std::cout << tab[i] << std::endl;
peut être remplacé par:
std::vector<double> tab;
for (std::vector<double>::iterator it = tab.begin(); it != tab.end(); ++it)
std::cout << *it << std::endl;
Néanmoins, ce problème peut aussi être évité en regardant la taille du tableau via le ".size()", comme l'a très justement souligné Buno.
Si je fais A.size() ça me retourne le nombre de lignes x le nombre de colonnes ?
Ça te retourne le nombre d'éléments dans A, donc le nombre de sous tableau que possède A. Ça ne te donne pas la taille des sous tableaux.
Soit tu sais que c'est une matrice carré, et tu fais "A.size() * A.size()", soit tu regardes dans ta boucle, si le sous tableau est de la bonne taille au moment ou tu le parcours. Si on consièdre que chaque sous tableau a une taille égale, alors tu peux faire "A.size() * A[0].size()".
Kellog
Messages postés7Date d'inscriptionlundi 10 février 2014StatutMembreDernière intervention11 février 2014 10 févr. 2014 à 22:57
merci beaucoup pour vos conseils, j'ai pu terminer mon projet...le seul bémol est qu'il prend beaucoup de temps pour les gros calculs (je ne peux même pas attendre un résultat) et pourtant mon pc est assez puissant...peut être un probleme avec Xcode...J'essayerai sur une autre machine pour vérifier.
Merci encore et bonne soirée
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 11 févr. 2014 à 10:29
le seul bémol est qu'il prend beaucoup de temps pour les gros calculs (je ne peux même pas attendre un résultat) et pourtant mon pc est assez puissant...peut être un probleme avec Xcode...J'essayerai sur une autre machine pour vérifier.
Ce n'est ni un problème avec Xcode, ni un problème de PC. C'est tout simplement un problème d'algorithmie. Au vu du code posté (on voit clairement que tu débutes), il y a de forte chance que ça vienne de la technique utilisée.
Je ne dis pas ça pour t'embêter, ou te rabaisser, mais pour t'éviter de passer du temps sur des pistes qui ne sont pas bonnes.