Oh mon dieu, ce code est une horreur de "C compilé en C++", avec un mélange de char* et de new/delete et nombre de ces derniers devraient en fait être delete[] vu que c'est de l'effacement de tableaux.
Et en plus, il y a des variables globales (comme OldBuffer).
Mais au moins, j'ai pu confirmer que du moins pour StartStateTagger(), le premier paramètre est un tableau de numSen chaînes de caractères; la fonction ne modifie pas les chaînes pointées, mais modifie les pointeurs en les remplçant par des pointeurs de buffers alloués devant être désalloués avec delete[] (ou peut-être free(), dépendant du contenu de la fonction perl_split()).
Quant à la fonction FinalStateTagger(), elle est carrément à jeter, car elle retourne un pointeur vers une variable locale!
Mais là aussi, buf est censé être un tableau de numSen chaînes de caractères, et cette fonction-là ne modifie jamais ni les chaînes pointées ni les pointeurs (le paramètre devrait donc être déclaré comme char const * const *buf, surtout si le code est compilé en C++ ou compilé sous Visual Studio).
...Mais franchement, à ta place je n'utiliserais pas ce code, il est horrible, buggué, peu commenté et sa gestion de la mémoire est indigne du langage C++. N'importe qui "connaissant" vraiment le C++ s'en serait rendu compte au premier coup d'œil. Mon conseil: Balance ce code à la corbeille, vide-là, apprends C# (qui pardonne mieux les erreurs que C ou C++) et cherche sur le web un Brill Tagger en C#, ça marchera beaucoup mieux.
...Ou un Brill Tagger en vrai C, ou en vrai C++. N'importe quoi sauf cet hybride impie.
Partager