Bonjour à tous,

Je n'ai pas trouvé de réponse en cherchant sur le net, alors je me permet de poster ici.
J'ai développé une librairie statique contenant des fonctions d'encodage/decodage.
Ces fonctions prennent en paramètre un tableau à initialiser.

Quand j'appelle ces fonctions directement dans ma librairie, aucun souci, mes tableaux sont correctement initialisés.
En revanche, dès que j'y fait appel depuis un programme externe, il n'y a plus moyen d'avoir des valeurs correctes...

Il s'agit de fonctions d'encodage/decodage G711 loi A, loi µ:

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
void SetEncodingMap(int law, unsigned char *array, int size){
    int i;
 
    if(size == SIZE_ENCODING_MAP){
        if(law == ALAW){
            for(i = SHRT_MIN; i <= SHRT_MAX; i++){
                array[(i & 0xffff)] = EncodeAlaw(i);
            }
        }else{
            for(i = SHRT_MIN; i <= SHRT_MAX; i++){
                array[(i & 0xffff)] = EncodeUlaw(i);
            }
        }
    }
}
 
void SetDecodingMap(int law, short *array, int size){
    int i;
 
    if(size == SIZE_DECODING_MAP){
        if(law == ALAW){
            for(i = 0; i < UCHAR_MAX; i++){
                array[i] = DecodeAlaw(i);
            }
        }else{
            for(i = 0; i < UCHAR_MAX; i++){
                array[i] = DecodeUlaw(i);
            }
        }
    }
}
J'ai effectué les tests suivants:
- Recompilation avec/sans flags d'optimisation de g++ (-O2, et -O3)
- Ajout du mot-clé volatile sur les tableaux
- Appels aux fonctions d'encodage/decodage (EncodeA/Ulaw et DecodeA/Ulaw) depuis un programme externe pour confirmer leur bon fonctionnement (OK)

Mais je n'ai toujours aucune piste pour résoudre ce problème...

Merci d'avance