IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

bug incompréhensible


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Par défaut bug incompréhensible
    Mon programme se compile bien mais une erreur se produit à son lancement et me contrains d'achever son éxecution.
    voici la partie du code à considerer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    void shift_fft (double *son, double *syn_sin,
    			   double *freq, double *dec, double *ampl, double *arg)
    {
     
    ...
    	SPdRFFT(son, NZP, 1); //FFT of son
    	Mat_abs (son, NZP);
    ...	
    	freq[r] = 2 * ind_w * PI / NZP;
    	SetComplex(&zm,0,freq[r]);
    ...
    	Mat_Vandermonde (C, NL, &zm);
     
    ...
     
    	ampl[r] = 2.0 * AbsComplex(&c->P[0][0]);
    	arg[r] = ArgComplex(&c->P[0][0]);
    ...
    	}
    ...
    }
    Donc j'execute ma fonction et le programme s'arrete ici: " ampl[r] = 2.0 * AbsComplex(&c->P[0][0]);". J'ai bien déclaré ampl comme il faut mais à parrament cette ligne provoque l'arret du programme. Aussi, j'ai remarqué que si je plaçait cette ligne au pire, avant " Mat_Vandermonde (C, NL, &zm);", la ligne s'executait. Si je la place après: bug. J'ai pensé que ampl était perdue mais elle est bien déclarée je pense. Les fonctions commencant par Mat_... sont déclarées et déffinies dans un autre fichier, il en est de même pour les fonctions complex.

    Merci à qui m'aidera.


  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    la portion de code ne permet pas d'identifier le bug mais nous renseigne sur sa nature ...:
    beaucoup de pointeurs utilisés ,donc problabement un dépassement de mémoire ,ou affectation illicite de la mémoire (pointeur null,no man's land..)
    il faudrait que tu verifies les adresses obtenues pour chaque indicage .
    ce genre de code me fait plutot penser à du C qu'a du C++ ,pourquoi ne pas utiliser des references plutot que des pointeurs ?
    pour infos:
    http://c.developpez.com/faq/vc/?page...gPointeurValue


  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Par défaut
    Intéressant le ying yang avec le rond blanc dans le blanc et le noir dans le noir: il y a du bien dans le bien et du mal dans le mal!
    Oui, effectivement c'est du C. Tu me dis qu'il y a beaucoup de pointeurs, y a t il une restriction concernant leur nombre, ou une règle à ce sujet que j'aurai
    bafouée me valant la réputation de débutant du pointeur. Peux tu m'éclairer à ce sujet? Merci pour le lien. Le problème peut il être lié à une affectation illicite de mémoire si je m'aperçois qu'en plaçant la ligne "ampl[r] = 2.0 * AbsComplex(&c->P[0][0]); " avant "Mat_Vandermonde (C, NL, &zm);", ampl[r] est bien prise en compte?

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par petdelascar
    Intéressant le ying yang avec le rond blanc dans le blanc et le noir dans le noir: il y a du bien dans le bien et du mal dans le mal!
    Oui, effectivement c'est du C. Tu me dis qu'il y a beaucoup de pointeurs, y a t il une restriction concernant leur nombre, ou une règle à ce sujet que j'aurai
    bafouée me valant la réputation de débutant du pointeur. Peux tu m'éclairer à ce sujet? Merci pour le lien. Le problème peut il être lié à une affectation illicite de mémoire si je m'aperçois qu'en plaçant la ligne "ampl[r] = 2.0 * AbsComplex(&c->P[0][0]); " avant "Mat_Vandermonde (C, NL, &zm);", ampl[r] est bien prise en compte?
    non il n'y a pas de restriction mais en C++ on préfère le passage par référence ,c'est une recommandation générale que je me suis permis de te faire vu que nous sommes sur un forum C++ lol.
    Le problème est peut être même avant ta fonction ...
    Il faut que tu vérifies :
    -Tous les pointeurs passés (adresses valides ? cf mon lien sur l'affectation des pointeurs), et qu'ils gèrent un taille mémoire suffisamment grande (débordement mémoire) pour leurs utilisations.
    - Les variables qui indicent les tableaux de pointeurs ce qui m’amène à la remarque :

    D’un point de vue conception je vois des choses dangereuses :
    Dans ta fonction tu indices freq[r] avec r ,r qui a l'air d'être globale..
    Qui me dit que son indice est valide ?
    Lorsque l'on dispose d'un trop grand nombre d'arguments à passer il vaut mieux utiliser une structure de communication pour la fonction.
    Et surtout éviter les dépendances externes (variables globales) .


  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Par défaut
    Ok, merci pour ta réponse, j'avai effectivement déclaré bêtement r en dehors de la fonction sans m'en rendre compte. Bonne journée gars et merci encore.[/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Cygwin ImageMagic Bug incompréhensible
    Par belette07 dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 28/07/2009, 16h28
  2. Bug incompréhensible IE6
    Par Lideln75 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/06/2009, 10h22
  3. J'ai besoin d'aide concernant un bug incompréhensible
    Par Kicker dans le forum GTK+ avec C & C++
    Réponses: 22
    Dernier message: 23/05/2008, 13h27
  4. [PC] Sockets avec API win32, bug incompréhensible
    Par ValyGator dans le forum Windows
    Réponses: 4
    Dernier message: 27/02/2008, 17h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo