Столкнулся со следующей проблемой- при emit сигнала с параметром в виде QByteArray длины до 3-х байт программа вылетает с фразой unknown signal.
// Слот асинхронного получения данных
void UART_Manager_C::Receive_Async()
{
// Считать данные
QByteArray Answer = Receive();
// Если длина данных больше нуля
if (Answer.length() > 0)
{
// Отправить сигнал
emit Data_Received(Answer);
}
}
Небольшое пояснение- это фрагмент кода класса для работы с COM портом. Внешний объект коннектится к сигналу Data_Received, в методе Receive_Async же происходит асинхронное получение данных по сигналу readyRead от порта с последующей отправкой данных в случае, если они корректны (Проверка происходит в методе Receive).
Если длина Answer больше или равна 3 байтам, то emit проходит без проблем, в противном случае код вылетает на этих строчках в файле qbytearray.h по условию i >= 0 (i, чем бы он ни был, при вылете равен -2)
inline QByteRef QByteArray::operator[](int i)
{ Q_ASSERT(i >= 0); return QByteRef(*this, i); }
В поле Проблемы QT выводит следующее
:-1: ошибка: Возникло исключение: Exception at 0x6b78f704, code: 0xc0000602: , flags=0x0.
P.S. Работаю в QT Creator с QT версии 5.12. Компилятор- MinGW 64 bit
Проблема была во внешнем обрабатывающем слоте. В нем происходил выход за границы массива. Спасибо @Bogdan и @goldstar_labs за помощь в решении проблемы
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хочу написать программу, которая будет строить треугольник СерпинскогоМне нужно получить координаты первого треугольника, но я не хочу...
Есть последовательность из чисел, надо перед каждым отрицательным вставить 0 Я записал начальную последовательность в vector и потом хотел...