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 :

Erreur de segmentation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut Erreur de segmentation
    Bonjour, j'ai une erreur de segmentation. Je pense avoir identifié où elle se trouve.
    Elle se trouve dans la fonction suivante:

    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
     
    void FrequencyTransposition(double *signal_reel, float tk, int N)
    {
      int i;
      float fp;
     
       double signal_re[N];
      double cosinus[N];
      double sinus[N];
      double signal_re_transpose[N];
      double signal_im_transpose[N];
     
     
     
     
      FILE * FicSortie;
      printf("\nN=%d",N);
      printf("\ntk=%f",tk);
     
      for(i=0;i<N;i++)
      { 
    	signal_re[i]=signal_reel[i];      /*Récupération du signal partie réelle*/ 
      }	
     
     
      printf("\n\nFréquence de la porteuse en MHz :");   
      scanf("%f",&fp);
     
      printf("\n\nSignal partie réelle transposé par une porteuse de %lf MHz :",fp);       
     
    /*Partie reelle*/
      for(i=0;i<N;i++)
      {
       cosinus[i] = cos(2*3.1416*fp*i*tk);                      
    	signal_re_transpose[i]=signal_re[i]*cosinus[i];            /*Multiplication du signal reel par cos(2*pi*fp*tk)*/
     }
     
     
    /*Partie imaginaire*/
     for(i=0;i<N;i++)
      {
        sinus[i] = sin(2*3.1416*fp*i*tk);                      
    	signal_im_transpose[i]=signal_re[i]*sinus[i];            /*Multiplication du signal  par sin(2*pi*fp*tk)*/
     }
     
     
     
     
     
     
     
     
    FicSortie= fopen("F:/Users/garnier/Matlab/imag.txt","w");
     
     for (i=0;i<N;++i)
     {fprintf(FicSortie,"%lf\n ",signal_im_transpose[i]); 
      }
     fclose(FicSortie);
     
     
    FicSortie= fopen("F:/Users/garnier/Matlab/reel.txt","w");
     
     for (i=0;i<N;++i)
     {fprintf(FicSortie,"%lf\n ",signal_re_transpose[i]); 
      printf(" %lf ",signal_re_transpose[i]);
     }
     fclose(FicSortie);
     
      return;
    }
    Pouvez-vous m'aidez merci.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    Es tu sur que signal_reel a été alloué et si oui que ton N n'est pas trop grand et donc va taper a une mauvaise adresse

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    Je ne sais pas. Comment peut-on le savoir?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    ca n'arrangera pas ton probleme mais pour faire une copie de chaine tu peux utiliser la fonction :
    char *strncpy (char *dest, const char *src, size_t n);
    char* est un pointeur vers ta chaine dest

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    au lieu d'utiliser un N fait un strlen() pour obtenir la taille et vérifie avant l('appel a la fonction que tu as alloué de la memoire chaine = (char*) malloc ( N*sizeof(char) )
    ou bien initalisé comme tableau chaine[N]
    tu peux utilisé un boolean lors de ton initialisation des qu'il est initilisé tu le passes a true et dans ta fonction tu test si c a true

  6. #6
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par sandball22
    Bonjour, j'ai une erreur de segmentation. Je pense avoir identifié où elle se trouve.
    Elle se trouve dans la fonction suivante:

    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
     
    FicSortie= fopen("F:/Users/garnier/Matlab/imag.txt","w");
     
     for (i=0;i<N;++i)
     {fprintf(FicSortie,"%lf\n ",signal_im_transpose[i]); 
      }
     fclose(FicSortie);
     
     
    FicSortie= fopen("F:/Users/garnier/Matlab/reel.txt","w");
     
     for (i=0;i<N;++i)
     {fprintf(FicSortie,"%lf\n ",signal_re_transpose[i]); 
      printf(" %lf ",signal_re_transpose[i]);
     }
     fclose(FicSortie);
    Pouvez-vous m'aidez merci.
    La fonction fopen peut planter. Il faut toujours vérifier son retour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        if ((ptr_file = fopen("nomFichier","w")) == NULL)
        {
            fprintf(stderr,"Impossible d'ouvrir le fichier !!!\n");
            exit(EXIT_FAILURE);
        }

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    Cela ne vient pas de la fonction fopen car je l'ai mise en commentaire.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    J'ai fait des modifs dans mon code. Cela marche mieus mais quand j'augmente tk et N il y a toujours des erreurs de segmentation mais à des valeurs supérieurs ç celles ou cela ne fonctionnait pas.

    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
     
    void FrequencyTransposition(double *signal, float tk, int N)
    {
      int i;
      float fp;
     
    //  double signal_re[N];
      double signal_re_transpose[N];
      double signal_im_transpose[N];
     
     
     
     
    //  FILE * FicSortie;
      printf("\nN=%d",N);
      printf("\ntk=%f",tk);
     
    //  for(i=0;i<N;i++)
    //  { 
    //	signal_re[i]=signal_reel[i];      /*Récupération du signal partie réelle*/ 
    //  }	
     
     
      printf("\n\nFréquence de la porteuse en MHz :");   
      scanf("%f",&fp);
     
      printf("\n\nSignal partie réelle transposé par une porteuse de %lf MHz :",fp);       
     
    /*Partie reelle*/
      for(i=0;i<N;i++)
      {
      // cosinus[i] = cos(2*3.1416*fp*i*tk);                      
    	signal_re_transpose[i]=signal[i]*cos(2*3.1416*fp*i*tk);            /*Multiplication du signal reel par cos(2*pi*fp*tk)*/
     }
     
     
    /*Partie imaginaire*/
     for(i=0;i<N;i++)
      {
       // sinus[i] = sin(2*3.1416*fp*i*tk);                      
    	signal_im_transpose[i]=signal[i]*sin(2*3.1416*fp*i*tk);            /*Multiplication du signal  par sin(2*pi*fp*tk)*/
     }
     
     
     
     
     
     
    //  printf("\n\nSignal partie imaginaire transposé par une porteuse de %f MHz :",fp);        
    //  for(i=0;i<N;i++)
    //  {
    //    sinus[i] = sin(2*3.1416*fp*i*tk);    
    //	signal_im_transpose[i]=signal_im[i]*sinus[i];              /*Multiplication du signal imaginaire par sin(2*pi*fp*tk)*/
    //	printf("\n%d  %f ",i+1,signal_im_transpose[i]);	
    //  }
     
     
    //FicSortie= fopen("F:/Users/garnier/Matlab/imag.txt","w");
    //  
    // for (i=0;i<N;++i)
    // {fprintf(FicSortie,"%lf\n ",signal_im_transpose[i]); 
    //  }
    // fclose(FicSortie);
     
     
    //FicSortie= fopen("F:/Users/garnier/Matlab/reel.txt","w");
     
    // for (i=0;i<N;++i)
    // {fprintf(FicSortie,"%lf\n ",signal_re_transpose[i]); 
    //  printf(" %lf ",signal_re_transpose[i]);
    // }
    // fclose(FicSortie);
     
      return;
    }

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Par défaut
    question, ça marche ça en c99?

  10. #10
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par reptils
    question, ça marche ça en c99?
    Oui, c'est ce qui est appele Variable Length Array (VLA). Par contre ce n'est pas forcement correctement supporte par tout les compilateurs (aux dernieres nouvelles l'implementation des VLA de gcc n'est pas encore conforme)

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

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