Висячий указатель возвращается, так как encodedStr
уничтожается при возврате ApplyArabicMapping()
, что приводит к неопределенному поведению .
Чтобы исправить, либо верните std::string
, если это возможноили создайте копию буфера char*
, используя new
, и верните ее: вызывающий должен delete[]
это, когда больше не требуется:
char* returnStr = new char[encodedStr.length() + 1];
std::copy(encodedStr.begin(), encodedStr.end(), returnStr);
*(returnStr + encodedStr.length()) = 0; // null terminate.