Passage par adresse d'un triple pointeur
Bonjour,
J'essaye de faire un wrapper d'une lib C++ pour du C#, et dans ce cadre j'ai besoin de convertir un vector<string> en char***.
Pour cela, j'utilise une fonction avec le vector<string> et le char*** en paramètre, le problème étant qu'au retour de cette fonction je perd les données pointées par mon char***, voici l exemple:
Code:
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| int main() {
cout << "Start of the program" << endl;
vector<string> vStr = vector<string>();
vStr.push_back("ABC");
vStr.push_back("DEF");
vStr.push_back("GHI");
vStr.push_back("JKL");
vStr.push_back("MNO");
vStr.push_back("PQR");
char*** pStr = new char**();
int* pLength = new int();
cout << " > before export" << endl;
exportVector(vStr, pStr, pLength);
cout << " < after export" << endl;
cout << "\t pLength value = " << *pLength << endl;
for (unsigned int i = 0 ; i < vStr.size(); i++)
{
cout <<"\t pStr "<< i << ": " << vStr[i] << " to ";
for(unsigned int j = 0; j < 3; ++j)
{
cout << "-" << pStr[0][i][j];
}
cout << "-"<< endl;
}
cout << "End of the program" << endl;
delete pStr;
delete pLength;
return 0;
}
void exportVector(vector<string> vect, char*** pData, int* pSize)
{
vector<char*> charVect = vector<char*>(vect.size());
//cout << "\t charVect.size() = " << charVect.size() << endl;
// Copy and cast elements of given vector into chars
for(unsigned int i = 0; i < vect.size() ; i++)
{
charVect[i] = const_cast<char*>(vect[i].c_str());
}
*pData = &charVect[0];
*pSize = vect.size();
cout << "\t pSize = " << *pSize << endl;
for (unsigned int i = 0 ; i < vect.size(); i++)
{
cout <<"\t pData "<< i << ": ";
for(unsigned int j = 0 ; j < 3 ; ++j)
{
cout << "-" << pData[0][i][j];
}
cout << "-"<< endl;
}
} |
En executant, on obtient:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Start of the program
> before export
pSize = 6
pData 0: -A-B-C-
pData 1: -D-E-F-
pData 2: -G-H-I-
pData 3: -J-K-L-
pData 4: -M-N-O-
pData 5: -P-Q-R-
< after export
pLength value = 6
pStr 0: ABC to -Ä- -i-
pStr 1: DEF to - - -i-
pStr 2: GHI to -G-H-I-
pStr 3: JKL to -J-K-L-
pStr 4: MNO to -M-N-O-
pStr 5: PQR to -P-Q-R-
End of the program |
Je pense que le problème vient du fait que charVect est local à la fonction et est donc détruit en revenant de celle-ci, si c est bien le cas, comment faire alors?
Merci de votre aide.