Cela fait longtemps que je n'ai pas programmé en C++, mais j'ai récemment écrit une petite fonction C++ et j'ai un peu de mal. La fonction renvoie une structure, Result, qui contient des chaînes. Je pensais avoir alloué de la mémoire pour les chaînes, mais jsonResult est parfois partiellement écrasé.Problème de mémoire alloué C++
//The structs
struct Interp {
int score;
char* sentence;
char* jsonResult;
};
struct Result {
int resultCode;
char* errorMessage;
Interp interp;
};
...
//Inside the function
Result result;
//Store decode
const char* jsonResult,* sentence;
if (result.resultCode == -1)
{
LVInterpretation interp = port.GetInterpretation(voiceChannel, 0);
result.interp.score = interp.Score();
sentence = interp.InputSentence();
jsonResult = interp.ResultData().Print(SI_FORMAT_ECMA);
}
//Allocate memory for strings
result.interp.jsonResult = new char[strlen(jsonResult) + 1];
strcpy(result.interp.jsonResult, jsonResult);
result.interp.sentence = new char[strlen(sentence) + 1];
strcpy(result.interp.sentence, sentence);
result.errorMessage = new char[strlen(errorMessage) + 1];
strcpy(result.errorMessage, errorMessage);
return result;
Autres informations: J'observe tout cela derrière le python liant que je l'ai écrit, en utilisant ctypes. Ne pensez pas que cela affecte vraiment quelque chose.
L'utilisation de 'std :: string' vous éviterait beaucoup de maux de tête. –
Vous ne montrez pas assez de code pour que nous devinions où le problème pourrait être. En particulier, le code qui libère la mémoire que vous avez allouée est absent de cet affichage. –
Je ne sais pas vraiment quel autre code montrer. C'est le seul code qui traite de ces chaînes. Je me demande juste si j'ai correctement alloué de la mémoire pour les chaînes. Si c'est le cas, le problème est probablement lié à ma liaison python. – veered