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 compilation avec cygwin


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Février 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 9
    Par défaut erreur de compilation avec cygwin
    Je suis un doctorant en finance et j’ai appris tout seul à programmer avec le langage C. Certes, je sais quelques notions dans la programmation mais je suis toujours débutant dans ce domaine. Je compile les programmes avec cygwin. De plus, j’utilise, lors de cette compilation, la librairie GSL (GNU scientific Librairy).
    Bref, lors de l’exécution d’un programme (qui permet de calculer une intégration numérique et que j’ai nommé cdf_mdim), j’ai eu le message suivant (avec le débuggeur gdb) :

    9 [main] cdf_Mdim 3816 _cygtls::handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
    1637 [main] cdf_Mdim 3816 open_stackdumpfile: Dumping stack trace to cdf_Mdim.exe.stackdump
    521872 [main] cdf_Mdim 3816 _cygtls::handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
    578746 [main] cdf_Mdim 3816 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)
    Program received signal SIGSEGV, Segmentation fault.
    0x61016525 in stack_info::walk () from /usr/bin/cygwin1.dll


    Est que quelqu'un peut m’aider à résoudre ce problème (je peux vous envoyer mon code par mail dans ce cas). Est-ce que c’est un problème de mémoire de mon ordinateur (processeur centrino duo 1.73 ghz et une RAM de 2 Go) ?
    Merci d’avance

  2. #2
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Vous ne pouvez pas poster votre code sur le forum?

  3. #3
    Membre régulier
    Inscrit en
    Février 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 9
    Par défaut
    Si vous voulez je peux vous envoyer le code par mail. En fait, c'est un code qui fait appel à d'autres programmes (notamment les cubatures).

  4. #4
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    En fait je ne connais pas votre librairie, donc je ne pourrais pas vous être d'une grande aide pour les problèmes relatifs à celle-ci.Mais je peux essayer si vous voulez.
    Avez vous regardé les lignes concernées par les erreurs?

  5. #5
    Membre régulier
    Inscrit en
    Février 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 9
    Par défaut
    j'ai pas trés bien compris votre question (je suis novice en matière de programmation). Mais lorsque je fais mon problème c'est dans l'exécution
    (gdb) bt, ce message s'affiche

    #0 0x61016525 in stack_info::walk () from /usr/bin/cygwin1.dll
    #1 0x75cad549 in OutputDebugStringA ()
    #2 0x40010006 in ?? ()
    #3 0x00000000 in ?? ()

  6. #6
    Membre régulier
    Inscrit en
    Février 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 9
    Par défaut
    Voici mon programme principal:

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <math.h> 
    #include <gsl/gsl_math.h> 
    #include <gsl/gsl_sf_pow_int.h> 
    #include <gsl/gsl_linalg.h> 
    #include <gsl/gsl_matrix.h> 
    #include <gsl/gsl_vector.h> 
    #include <gsl/gsl_blas.h> 
    #include <gsl/gsl_sf_exp.h> 
    #include "cubature.h" 
     
     
    int count; 
    int n; 
     
     
    double bivar_cdf(unsigned dim, const double * x1, void *data) 
    { 
     
      int i,j; 
      int s; 
      double det,val, S; 
      double *R; 
      double P =dim; 
     
     
      R = (double *) malloc(1 * sizeof(double));  
      gsl_permutation* p = gsl_permutation_alloc(dim); 
      gsl_vector * x = gsl_vector_alloc (dim); 
      gsl_vector * xs = gsl_vector_alloc (dim); 
      gsl_matrix * A = gsl_matrix_alloc (dim, dim); 
      gsl_matrix * At = gsl_matrix_alloc (dim, dim); 
      gsl_matrix * SIG = gsl_matrix_alloc (dim, dim); 
      gsl_matrix *SIGi = gsl_matrix_alloc (dim, dim); 
      ++count; 
     
      for (i=0; i < dim; i++){ 
        for (j=0; j < dim; j++){ 
     
          if (i < j) gsl_matrix_set (A,i,j,0); 
     
          else gsl_matrix_set (A,i,j,1); 
     
        }} 
    for (i=0; i < dim; i++) gsl_vector_set (x,i,x1[i]); 
     
      gsl_matrix_transpose_memcpy(At,A);  
      gsl_blas_dgemm (CblasNoTrans, CblasNoTrans,1.0, A, At, 0.0, SIG); 
      gsl_linalg_LU_decomp( SIG, p, &s ); 
      gsl_linalg_LU_invert(SIG,p,SIGi); 
      det  = gsl_linalg_LU_det(SIG,s); 
      gsl_blas_dgemv(CblasNoTrans, 1.0, SIGi, x, 0.0, xs); 
      gsl_blas_ddot(x,xs,R); 
     
     
      S = exp ((-R[0]/2)); 
      val =(1/(pow((2*M_PI),(P/2)))*(pow(abs(det),0.5)))*S; 
     
      return val; 
    } 
     
    int main()  
    { 
     
     int i; 
     
     double val, err; 
     double tol = 1.e-6; 
     double *xmin, *xmax; 
     unsigned dim = 6; 
     unsigned maxEval =  1000000;  
     
     printf("#==================================================================\n" ); 
     printf("# Parameters:\n" ); 
     printf("# dim = %d   tol = %f   maximum number of evals = %d\n",dim,tol,maxEval); 
     
     
     xmin = (double *) malloc(dim * sizeof(double)); 
     xmax = (double *) malloc(dim * sizeof(double)); 
     
     for (i = 0; i < dim; i++) { 
       xmin[i] = -99; 
       xmax[i] = 1.96; 
     
     } 
     
     
       count = 0; 
     
       adapt_integrate(bivar_cdf, 0, dim, xmin, xmax, maxEval, 0, tol, &val, &err); 
     
     
     
     printf("#------------------------------------------------------------------\n" ); 
     printf("# Results:\n" ); 
     printf("# Integration value = %g\n",val); 
     printf("# Est. err = %g\n", err); 
     printf("# Number of function evals required = %d\n", count); 
     printf("#==================================================================\n" ); 
     
     
     free(xmax); 
     free(xmin); 
     
     return 0; 
    }
    RQ: si maxEval = 100000 le programme s'exécute normalement.

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Je ne connais pas ces bibliothèques, mais j'ai l'impression que, dans la fonction bivar_cdf(), tu fais beaucoup d'allocations mémoire sans jamais faire de libération. Si elle est appelée de nombreuses fois, les allocations finiront par échouer et le programme va planter (il n'y a aucun test sur la réussite des allocations).
    Cette remarque concerne R (pourquoi double *R = malloc(sizeof(double)) plutôt que double R[1] ?) et tous ces gsl_xxxxx_alloc()

Discussions similaires

  1. Erreur de compilation avec Excel_2k
    Par Debure dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/06/2006, 14h51
  2. Erreur de compilation avec APRO
    Par netchip dans le forum Langage
    Réponses: 1
    Dernier message: 22/04/2006, 23h12
  3. Erreur de compil avec Outp
    Par sixon dans le forum C++
    Réponses: 2
    Dernier message: 27/02/2006, 15h01
  4. Erreur de compilation avec SWITCH et CASE
    Par barbarello dans le forum C++
    Réponses: 4
    Dernier message: 21/01/2006, 21h47
  5. [FreePascal]Erreur de compilation avec Dev-Pascal
    Par youngeikichi dans le forum Free Pascal
    Réponses: 3
    Dernier message: 17/02/2005, 14h22

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