Прошло много времени с тех пор, как я программировал на C ++, но недавно я написал небольшую функцию на C ++, и у меня возникли небольшие проблемы. Функция возвращает структуру Result, в которой есть несколько строк. Я думал, что выделил память для строк, но иногда jsonResult частично перезаписывается.
//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;
Другая информация:
Я наблюдаю все это за связыванием python, которое я написал, используя ctypes. Не думайте, что это действительно что-то влияет.