Есть функция которая возвращает массив:
byte *array(const ByteArray &src, int begin, const unsigned& countElement) {
std::vector<unsigned char> arr(countElement);
try {
for (int i = 0; i < countElement; i++, begin++) {
arr[i] = src[begin];
}
}
catch (std::exception e) {
std::cout << "error";
}
return &arr[0]
}
Однако когда я итерирую по результату я получаю только первое значение, дальше идет полная дичь, хотя дебаггер показывает на рутурне ожидаемый результат, но после:
byte *val1 = array(msg, startData, 4);
for (int i = 0x0; i < 0x4;i++) {
std::cout << val1[i] << std::endl;
}
ожидаемым оказывается только элемент с индексом один, дальше идут одинаковые байты со значением 221, хотя я такие значения не посылал.
ПОЧЕМУ?!
Эта функция возвращает не массив, а невалидный указатель на первый элемент, хранившийся в векторе arr
, который выходит из области видимости. Возвращайте сам вектор.
Еще можно добавить, что обработка исключений сделана неправильно, в блоке for
никаких исключений быть не может, а исключение потенциально бросаемое из конструктора вектора не перехватывается.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
После запуска без отладки выполняет первую строку и просит ввести данные и завершает программу c кодом -1073740791
Хотел бы получить 6 классов Types, Sst, relations, workbook, styleSheet, worksheet готовых к сериализацииМожет у кого есть готовые