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

C++ Discussion :

comment régler l'erreur de segmentation


Sujet :

C++

  1. #1
    Membre à l'essai
    Femme Profil pro
    informatique
    Inscrit en
    Juillet 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 27
    Points : 14
    Points
    14
    Par défaut comment régler l'erreur de segmentation
    Bonjour à tout le monde, j'ai une petite problème avec ce programme , il m'affiche toujours une erreur de segmentation malgré j'ai regardé sur l'internet mais je n'arrive pas à régler ce problème

    merci d'avance

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #include <fstream>
    #include <iostream>
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <limits>
    #include <stdlib.h>
     
    using namespace std;
     
     
    double u(double x, double y)
    { double res;
    res = x*x+y*y-1;
    return res;
    }
     
     
     
    int main()
    {
     
     int Nx=200;
     double Nt=10;
     int Ny=200;
     
     
    double X[10][400][400];
    double stepx=0.01;
    double stepy=0.01;
    double stept=1.0/Nt;
     
     
    FILE *fp;
     
    fp=fopen("projet.txt", "w");
     
    for(int i=-200;i<Nx;i++)
    {
     for(int j=-200;j<Ny;j++)
     {
     double x=i*stepx;
     double y=j*stepy;
     
     X[0][i][j]= u(x,y);
     
    fprintf(fp," %f   %f  %f   \n",   x , y  , X[0][i][j]);
     }
    }
    fclose(fp);
     
    FILE *sd;
    sd=fopen("sirine.txt","w");
     
     
     
    for (int t=1;t<10;t++)
    {double s=(1.0/20)*(2*t+11*(  exp (-t)-exp (t)));
     
    double R=(1.0/20)*(-2*t+11*(exp (t)+exp (-t)));
         for (int i=-200;i<Nx;i++)
     {
     for(int j=-200;j<Ny;j++)
     {
     double x=i*stepx;
     double y=j*stepy;
     
    X[1][i][j]= (x-s)*(x-s)+ y*y-R;
    fprintf(sd," %f   %f  %f   \n",   x , y  , X[1][i][j]);
     }
     }
    }
    fclose(sd);
     
    }

  2. #2
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 516
    Points : 706
    Points
    706
    Par défaut
    ça ressemble plus à du C qu'à du C++, mais bon...

    A la ligne 45, l'accès au tableau va générer une erreur puisque tes indices i et j peuvent être négatifs, donc taper en dehors de l'emplacement réservé au tableau.
    De plus, l'indice évoluant de -200 à 200, ça fait 401 valeurs pour un tableau qui n'en contient que 400.

    A+

  3. #3
    Membre à l'essai
    Femme Profil pro
    informatique
    Inscrit en
    Juillet 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 27
    Points : 14
    Points
    14
    Par défaut salut
    Citation Envoyé par jackk Voir le message
    ça ressemble plus à du C qu'à du C++, mais bon...

    A la ligne 45, l'accès au tableau va générer une erreur puisque tes indices i et j peuvent être négatifs, donc taper en dehors de l'emplacement réservé au tableau.
    De plus, l'indice évoluant de -200 à 200, ça fait 401 valeurs pour un tableau qui n'en contient que 400.

    A+
    Merci pour ton réponse , j'ai essayé de le faire autrement mais c'est pareil même problème
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #include <fstream>
    #include <iostream>
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <limits>
    #include <stdlib.h>
     
    using namespace std;
     
     
    double u(double x, double y)
    { double res;
    res = x*x+y*y-1;
    return res;
    }
     
     
     
    int main()
    {
     
     int Nx=200;
     int Nt=10;
     int Ny=200;
     
     
    double X[401][401][10];
    double stepx=0.01;
    double stepy=0.01;
    double stept=1.0/Nt;
     
     
    FILE *fp;
     
    fp=fopen("projet.txt", "w");
     
    for(int i=0;i<Nx;i++)
    {
     for(int j=0;j<Ny;j++)
     {
     double x=-2+i*stepx;
     double y=-2+j*stepy;
     
     X[0][i][j]= u(x,y);
     
    fprintf(fp," %f   %f  %f   \n",   x , y  , X[0][i][j]);
     }
    }
    fclose(fp);
     
    FILE *sd;
    sd=fopen("projet_2.txt","w");
     
     
     
    for (int t=1;t<10;t++)
    {double s=(1.0/20)*(2*t+11*(  exp (-t)-exp (t)));
     
    double R=(1.0/20)*(-2*t+11*(exp (t)+exp (-t)));
         for (int i=0;i<Nx;i++)
     {
     for(int j=0;j<Ny;j++)
     {
     double x=-2+i*stepx;
     double y=-2+j*stepy;
     
    X[1][i][j]= (x-s)*(x-s)+ y*y-R;
    fprintf(sd," %f   %f  %f   \n",   x , y  , X[1][i][j]);
     }
     }
    }
    fclose(sd);
     
    }

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Salut
    Je ponce que l’erreur est dans la ligne 28 cad dans l’enlacement de déclaration du tableau x ,j’ai déclaré le tableau comme un tableau globale cad avent la fonction main est tout sa marche très bien .....
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #include <fstream>
    #include <iostream>
    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <limits>
    #include <stdlib.h>
     
    using namespace std;
     
     
    double X[10][400][400]; 
    double u(double x, double y)
    { double res;
    res = x*x+y*y-1;
    return res;
    }
     int main()
    {
    int Nx=200;
     double Nt=10;
     int Ny=200;
     
    double x,y,s,R;
    double stepx=0.01;
    double stepy=0.01;
    double stept=1.0/Nt;
     FILE *fp;
     fp=fopen("projet.txt", "w");
     for(int i=0;i<Nx;i++)
    {
     for(int j=0;j<Ny;j++)
     {
       x=-2+i*stepx;
       y=-2+j*stepy;
     
     X[0][i][j]= u(x,y);
     
    fprintf(fp," %f   %f  %f   \n",   x , y  , X[0][i][j]);
     }
    }
     
    fclose(fp);
     
    FILE *sd;
    sd=fopen("sirine.txt","w");
     for (int t=1;t<10;t++)
    {
    s=(1.0/20)*(2*t+11*(  exp (-t)-exp (t)));
     R=(1.0/20)*(-2*t+11*(exp (t)+exp (-t)));
    for (int i=-200;i<Nx;i++)
     {
     for(int j=-200;j<Ny;j++)
     {
       x=i*stepx;
       y=j*stepy;
     
    X[1][i][j]= (x-s)*(x-s)+ y*y-R;
    fprintf(sd," %f   %f  %f   \n",   x , y  , X[1][i][j]);
     }
     }
    }
    fclose(sd);
    return 0; 
    }

  5. #5
    Membre à l'essai
    Femme Profil pro
    informatique
    Inscrit en
    Juillet 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 27
    Points : 14
    Points
    14
    Par défaut salut
    Citation Envoyé par bKm M27 Voir le message
    Salut
    Je ponce que l’erreur est dans la ligne 28 cad dans l’enlacement de déclaration du tableau x ,j’ai déclaré le tableau comme un tableau globale cad avent la fonction main est tout sa marche très bien .....
    Merci beaucoup , oui ça marche , merci

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    80*200*200*8 = 25 600 000 ~ 24 Mo. Pas terrible pour la pile

    Le code reste du C (et pas du C++) et est très fragile (pour ne pas dire mauvais). Il reste des index négatifs, la matrice à 3 dimensions, je trouve ça bof, il y a des constantes 'magiques' en dur, une variable globale, ça reste une pratique fortement déconseillée, utilisation des headers type C et non C++, mélange laissant l'impression de non maîtrisé entre du double/int, etc.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/04/2015, 13h35
  2. Réponses: 8
    Dernier message: 21/05/2010, 16h17
  3. [Crystal Report] Comment régler l'erreur "<PEStartPrintJob>" ?
    Par savoir dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 21/10/2008, 14h02
  4. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18
  5. [web] comment afficher les erreur d'un cgi
    Par chtiboss dans le forum Web
    Réponses: 6
    Dernier message: 24/12/2003, 11h22

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