Проблемы при копировании массива в С++

93
07 июля 2021, 08:30

Есть функция которая возвращает массив:

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, хотя я такие значения не посылал.

ПОЧЕМУ?!

Answer 1

Эта функция возвращает не массив, а невалидный указатель на первый элемент, хранившийся в векторе arr, который выходит из области видимости. Возвращайте сам вектор.

Еще можно добавить, что обработка исключений сделана неправильно, в блоке for никаких исключений быть не может, а исключение потенциально бросаемое из конструктора вектора не перехватывается.

READ ALSO
C++ процесс завершает работу с кодом -1073740791

C++ процесс завершает работу с кодом -1073740791

После запуска без отладки выполняет первую строку и просит ввести данные и завершает программу c кодом -1073740791

115
Как cериализовать xlsx c#?

Как cериализовать xlsx c#?

Хотел бы получить 6 классов Types, Sst, relations, workbook, styleSheet, worksheet готовых к сериализацииМожет у кого есть готовые

102