Bonjour, voici le code qui me cause un soucis (je m'excuse d'avance mais la balise CODE ne fonctionne pas sur mon PC....) :
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)
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 */ }
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.
Partager