Bonjour, voici le code qui me cause un soucis (je m'excuse d'avance mais la balise CODE ne fonctionne pas sur mon PC....) :

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
#define TAILLE_MAX 1024
#define DECALAGE 10
 
int ma_fun(donnees * data)
{
  double x[TAILLE_MAX], y[TAILLE_MAX], * x_temp, * y_temp, a, b;
  int i;
 
  for (i=DECALAGE; i<data->compteur_fluage1; i++) 
  {
        x[i-DECALAGE] =  data->date_fluage1[i] - data->date_fluage1[0] ;
        x[i-DECALAGE] /= 1000. ;
        y[i-DECALAGE] =  data->deflaser_fluage1[i] ;
  }
 
  nb_points = data->compteur_fluage1-DECALAGE; /* ici nb_points == 39 */
  x_temp    = calloc(nb_points, sizeof(*x_temp));
  y_temp    = calloc(nb_points, sizeof(*y_temp));
 
  if(x_temp == NULL || y_temp == NULL)
  {  
    FREE(x_temp); FREE(y_temp);
    return ERR_ALLOC;
  }
 
  for (i=0; i<nb_points; i++)
  {
    x_temp[i] = x[i];
    y_temp[i] = y[i];
  }
 
  F_D(x_temp,y_temp,&a,&b);
 
  /* suite du code */
}
F_D est une fonction fortran externe située dans une librairie développée en interne. C'est une fonction double précision (la version simple précision est la fonction F)

Je travaille avec Visual C++ 6.0. En mode Debug, je n'ai aucun soucis. En revanche, en mode Release, j'ai un écrasement mémoire. Après le passage dans la fonction F_D, les 18 premières composantes du vecteur y (j'ai bien dit y et non y_temp) sont modifiées. Pourtant cette variable n'est pas un argument de la fonction F_D. Si j'utilise la version simple précision (F et non plus F_D) le problème disparaît ... mais ça plante plus tard dans mon code car j'obtiens ensuite une matrice non inversible.

Pouvez-vous s'il vous plait me donner des pistes de recherche pour déterminer l'origine de cet écrasement mémoire ?

Un collègue m'a parlé de purify.

Meric d'avance, et excusez-moi du fait que la balise CODE ne marche pas sur mon PC.