Q:

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

Есть функция которая возвращает массив:
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, хотя я такие значения не посылал.
ПОЧЕМУ?!

A:

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

