2010-11-25 20 views
0

Je ne pense pas que je pourrais expliquer comment je suis énervée parce que je ne peux pas trouver où j'ai manqué ici ..Erreur vraiment étrange sur le code C++. Paramètre copié avec une valeur trash et non celui que je voulais

Les images peuvent tout expliquer:

Capture d'écran de débogage, avec une valeur nxxx (utilisée pour l'appeler n, mais cette variable merdique ne mérite pas un nom aussi cool). Breakpoint était en première ligne de cette méthode.

http://img202.imageshack.us/img202/5057/value.png

Le code où la méthode est appelée, getA et getB travaillent .. Tout fonctionnait comme il y a 10 minutes ..

commentaire Le premier est la signature de méthode, deuxième commentaire est le code d'origine , qui devrait fonctionner. (Remplacé n variable 0 pour voir si cela changerait quoi que ce soit .. avéré qu'il n'a pas)

/* 
    void HASAntData::init(float** A, 
     float** B, 
     int nxxx, 
     int R, 
     float q, 
     float Q, 
     float q1, 
     float q2, 
     int S, 
     int maxrounds, 
     int nThreads, 
     int seed) 
    */ 

    data->init(qap->getA(), 
       qap->getB(), 
       0, 
       1, 
       2, 
       3, 
       4, 
       5, 
       6, 
       7, 
       8, 
       9); 

    /* 
    data->init(qap->getA(), 
       qap->getB(), 
       0, 
       cudahas_R, 
       cudahas_q, 
       cudahas_Q, 
       cudahas_q1, 
       cudahas_q2, 
       cudahas_S, 
       cudahas_max_rounds, 
       cudahas_m, 
       Tools::randomInt(0, INT_MAX)); 
       */ 

modifier:

Voici la table avec toutes les valeurs variables, une traversée n'a pas d'importance pour ce problème. Voyez comment certaines variables sont OK, et certains ne sont pas

http://img831.imageshack.us/img831/6224/valuestable.png

+0

Si "TOUT fonctionnait comme il y a 10 minutes", pourquoi ne pas "Ctrl + Z" plusieurs fois et voir ce que vous avez changé? –

+4

Pour référence future, ne prenez pas une capture d'écran de votre code et incorporez l'image dans votre question, d'autant plus que vous pouvez simplement copier et coller le code/les données. Il est facilement formaté en indentant chaque ligne avec 4 espaces (utilisez Ctrl + K pour le faire rapidement). En outre, en intégrant des images au lieu du texte réel, vous empêchez de nombreuses personnes d'essayer votre code, mais elles ne le peuvent pas parce qu'elles ne peuvent pas le copier/coller. –

+0

@ James McNellis, parce que j'ai changé certaines choses. hier, j'ai passé tous ces arguments au constructeur, maintenant je l'ai changé et je passe tout à la méthode init. – hfingler

Répondre

0

Il semble que toutes les valeurs aient été décalées (Q est 2 au lieu de 3, q1 est 3 au lieu de 4, R est 0 au lieu de 1). Lorsqu'un int est interprété comme float, des valeurs étranges sont attendues. Je suppose que nxxx doit voir la valeur pour B.

Y a-t-il un décalage entre la définition et la déclaration de init?

+0

Je suggère que polaire essayer de nettoyer complètement et de reconstruire le projet. –

+0

voici l'implémentation 'void HASAntData :: init (float ** A, flotteur ** B, int nxxx, int R, flotteur q, flotteur Q, float q1, flotteur q2, int S, int maxrounds, int nThreads, int graine) 'et la définition' void init (float **, float **, int, int, float, float, float, float, int, int, int, int); '. Va essayer de lancer explicitement ces valeurs de test. – hfingler

+0

@In silico, je vais refaire cette méthode demain, peut-être tout déplacer vers le constructeur et supprimer la méthode init. – hfingler

0

L'utilisation d'une version optimisée? Si c'est le cas, cela peut perturber le débogueur.

Sinon, utilisez AppVerifier pour rechercher des corruptions de mémoire typiques.

+0

Non, je n'ai rien changé dans les propriétés/options du projet. Et ce n'est pas seulement un problème de débogueur. J'utilise la variable 'n' pour allouer de l'espace sur mon GPGPU, et comme cette variable peut atteindre des valeurs désagréables, je reçois une" exception de mémoire insuffisante ". – hfingler

+0

@polar, je n'ai pas dit que vous avez changé les propriétés, mais plutôt suggéré de vérifier la version actuelle que vous déboguez, et de voir si l'optimisation est activée. –