Salut Ami(e)s Développeurs
J'ai un problème assez mystérieux :
J'utilise VC++ 2010
J'ai créé un fichier .lib basé sur la librairie SISL de Sintef.
Cette librairie est composée d'un très grand nombre de fonctions (>=600) toutes écrites en C et ont l'air prets à etre plugés à une grosse application en c++ (présence de extern C, ....).
J'ai pu généré un seul .lib correspondant à toutes ces fonctions.
Pour les appeler dans mon appli j'utilise un header + le.lib au linkage.
Le problème est le suivant :
Pour une raison quelconque, certaines fonctions plantent à l'exécution, d'autres non.
En débugant j'ai remarqué que certains paramètres passés à la fonction se trouvant dans le .lib changent de valeur une fois dans le corps de cette fonction.
Ex :
Supposons que le prototype de la fonction dans le .lib est le suivant
void funcStaticLib(float[], float[], float, float[]);
Pour exécuter cette fonction,
je déclare les variables
1 2 3 4
| float tab1[3] = {0.0,1.0,0.0};
float tab2[3] = {1.0,1.0,0.0};
float val = 1.0;
float res[3]; |
puis j'appelle ma fonction :
funcStaticLib(tab1, tab2, val, res);
La fonction plante et quand je lance le debugger VC2010
je remarque en entrant dans le corps de funcStaticLib que
tab1 a tjrs la meme valeur
tab2 devient un pointeur invalide
val prend la valeur 2.37636763 E+18 pâr ex.
Vous ete d'accord avec moi que c'est totalement incompréhensible...comme si entre la déclaration des variables et le passage de paramètres, il s'est passé quelque chose
Voilà j'epère que je me suis fait bien comprendre.
Toute aide sera plus que appréciée.
Merci d'avance
Partager