[Débutant]Problème en mode Debug Seulement

Signaler
Messages postés
2
Date d'inscription
lundi 8 octobre 2007
Statut
Membre
Dernière intervention
12 octobre 2007
-
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
-
Bonjour,
J'ai un petit problème avec ce  code
l'application marche super bien en mode realese mais une fois sur Debug ça plante avec l'erreur suivante :

[B][SIZE="2"]Exception non gérée à 0x7c911230 dans BackGround_ForeGround.exe: Point d'arrêt utilisateur./SIZE
if (!HeapValidate(_crtheap, 0, NULL))
        {
            if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
            {
                _doserrno = ERROR_CALL_NOT_IMPLEMENTED;
                errno = ENOSYS;
            }
            else
                retcode = _HEAPBADNODE;
        }
        return retcode;
}

/B

et mon code le voilà :

void CTelemetre::Ecriture_Fichier_Trajectoire(CString fichier_resultat)
{
    [LIST=1]
[*]// Affichage des trajectoires
[*]    // Graphe 2
[*]    Xmin = Xmin1;
[*]    Ymin = Ymin1;
[*]    Xmax = Xmax1;
[*]    Ymax = Ymax1;
[*]    g1->Plume(NOIR);
[*]    g1->Viewport(52,97,5,98);
[*]    g1->Echelle(Xmin, Xmax, pax, ifx);
[*]    g1->Echelle(Ymin, Ymax, pay, ify);
[*]    g1->Clear(BLANC);
[*]    g1->Window(Xmin, Xmax, Ymin, Ymax);
[*]    g1->Grid(pax,pay);
[*]    g1->Grad_X(Ymin, pax, ifx);
[*]    g1->Grad_Y(Xmin,pay,ify);
[*]    Afficher_Marquage_Central(g1);

[*]    // Trajectoires intéressantes
[*]    if (compt>0)
[*]    {
[*]        CVehicule* traj_temp = new CVehicule[compt];

[*]        FILE* fichier_trajectoire = fopen(fichier_resultat, "a");
[*]    
[*]        fprintf(fichier_trajectoire, Fichier_telemetre.Mid(1+Fichier_telemetre.ReverseFind(_T('\\')))+"\n");

[*]        for (int k=1;k<numero;k++)
[*]        {
[*]            int valeur=0;
[*]            int* index = new int[compt];

[*]            for (int i=0;i<compt;i++)
[*]            {
[*]                if (traj[i].numero==k)
[*]                {
[*]                    index[valeur]=i;
[*]                    valeur++;
[*]                }
[*]            }

[*]            if (valeur > 40)            
[*]            {
[*]                int nbre_position[8] = {0};
[*]                char sens;

[*]                // Détermination du sens de circulation du véhicule
[*]                if (traj[index[1]].posVeh[0] < traj[index[39]].posVeh[0])
[*]                {
[*]                    sens = 'D';
[*]                } else {
[*]                    sens = 'G';
[*]                }
[*]                    
[*]                    for (i=0;i<valeur;i++)
[*]                    {
[*]                        traj[index[i]].sens= sens;
[*]                        // calcul de la vitesse par les échos telemetres
[*]                        traj[index[i]].Vitesse=Calcul_Vitesse(traj,max(0,i-1),i);

[*]                        if (traj[index[i]].Vitesse>35 || traj[index[i]].Vitesse<0.0001)                // pour eviter les vitesses incoherentes
[*]                            traj[index[i]].Vitesse = traj[index[max(0,i-1)]].Vitesse;

[*]                        // position
[*]                        traj_temp[i].posVeh[0] = traj[index[i]].posVeh[0];
[*]                        traj_temp[i].posVeh[1] = traj[index[i]].posVeh[1];
[*]                        traj_temp[i].Vitesse = traj[index[i]].Vitesse;
[*]                        traj_temp[i].Temps_PC = traj[index[i]].Temps_PC;
[*]                    }

[*]                    CVehicule* traj_lissee = new CVehicule[valeur];
[*]                    Lissage_Trajectoire(traj_temp, valeur, traj_lissee);
[*]                    TracerTrajectoireLissee(traj_lissee, valeur, numero);
[*]                    
[*]                

[*]                    int position_moy = 0;
[*]                    double vitesse_moy = 0;
[*]                    UpdateData(true);
[*]                    for (i=0;i<valeur;i++)
[*]                    {
[*]                        // Position du véhicule sur la chaussée
[*]                        Calcul_Position_Chaussee(index[i],traj_lissee[i].posVeh[0], traj_lissee[i].posVeh[1], traj[index[valeur-1]].Largeur,sens, m_largeur_chaussee);
[*]                        traj_temp[i].position = traj[index[i]].position;
[*]                        nbre_position[traj[index[i]].position]++;

[*]                        vitesse_moy += traj[index[i]].Vitesse;

[*]                        // Ecriture du fichier Trajectoire
[*]                        fprintf(fichier_trajectoire,"%I64d\t%d\t%c\t%d\t%f\t%d\t%f\t%f\t", traj[index[i]].Temps_PC,NUMERO,traj[index[i]].sens,traj[index[i]].position,traj[index[i]].ecart,traj[index[i]].image,traj[index[i]].posVeh[0],traj[index[i]].posVeh[1]);    
[*]                        fprintf(fichier_trajectoire,"%f\t",traj[index[i]].Vitesse);
[*]                        fprintf(fichier_trajectoire,"%f\t%f\tX[]=",traj[index[valeur-1]].Longueur, traj[index[valeur-1]].Largeur);
[*]                        for (int j=0;j<traj[index[i]].Taille_XY;j++) 
[*]                            fprintf(fichier_trajectoire," %f",traj[index[i]].Point_X[j]);
[*]                        fprintf(fichier_trajectoire," Y[]=");
[*]                        for (j=0;j<traj[index[i]].Taille_XY;j++) 
[*]                            fprintf(fichier_trajectoire," %f",traj[index[i]].Point_Y[j]);
[*]                        fprintf(fichier_trajectoire,"\n");
[*]                    }

[*]                    int *maxi;
[*]                    maxi = max_element(nbre_position,nbre_position+8);
[*]                    for (i=0;i<8;i++) 
[*]                        if (*maxi == nbre_position[i])
[*]                            position_moy = i;

[*]                    // Vitesse moyenne (en m/s)
[*]                    vitesse_moy /= valeur;

[*]                    delete[] traj_lissee;

[*]                    
[*]                    int Sens = (sens=='D') ? 1 : 0;
[*]                    Gstatistiques.Tracer_Statistiques(position_moy, vitesse_moy, Sens);

[*]                    
[*]                    UpdateData(false);
[*]                    if (m_courbes_vitesse)
[*]                    {
[*]                        GVitesse.Tracer_Courbe_Vitesse(traj_temp,valeur, vitesse_moy);
[*]                        GVitesse.DoModal();
[*]                    }
[*]                    if (m_position)
[*]                    {
[*]                        Gposition.Tracer_Courbe_Position(traj_temp, valeur, position_moy);
[*]                        Gposition.DoModal();
[*]                    }

[*]                    NUMERO++;

[*]            }
[*]            
[*]        
[*]            delete[] index;
[*]            
[*]        }

[*]        fprintf(fichier_trajectoire,"\n");

[*]        fclose(fichier_trajectoire);
[*]        
[*]        delete[] traj_temp; 
[*]    }

[*]}

/LIST
j'ai mis en rouge la ligne (50) où je pense il fait planter l'appli parce que si je met cette ligne en commentaire ça marche, mais avec des resultats bizarre à la fin  voilà.
Merci.

4 réponses

Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

Bonsoir,

ok tu as une segfault qui se balade, vérifie que tu accèdes pas n'importe où dans ton tableau traj que le tableau traj est bien initialisé, car j'ai pas vu où c'était d'ailleurs dans ton bout de code et puis méfie toi avec tes variables car des fois "i" va de 0 à compt et des fois de 0 à valeur ca peut craindre.

=

Une autruche ne se cuit pas aux petits lardons
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Salut

Bah tu as quand meme de la chance que ca plante en mode debug. Là tu as une explication sur l'erreur et la ligne ou celle ci c'est produit..
C'est souvent l'inverse qui se produit: le code marche en debug mais pas en release. Là c'est beaucoup plus difficile de trouver la segfault.

A+
Messages postés
2
Date d'inscription
lundi 8 octobre 2007
Statut
Membre
Dernière intervention
12 octobre 2007

bonjour,
j'ai regardé un peu partout dans le code mais je vois pas d'où ça viens l'erreur ?!!
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Une idée comme ca en l'air, Etudie le message de retour de ton fopen et met une protection. Si l'ouverture de ton fichier plante, ton programme aussi.
Ca peut venir de la.
A+