В этом коде
for(unsigned int b = 0; b < effective_length; b++)
{
sscanf(source.data() + (b * 2), "%02x", (unsigned int*) &destination[b]);
}
вы, кажется, пишете unsigned int
в местах destination
, destination+1
, destination+2
и т. Д.По мере приближения к последним байтам вашего destination
буфера вы будете писать за его пределами.
Для примера, давайте предположим, что получатель является четырехбайтовым буфером, а sizeof (unsigned int)
4 в вашей среде.Затем каждый sscanf
записывает четыре байта.
Первая итерация записывает байты 0, 1, 2, 3
Вторая итерация записывает байты 1, 2, 3, 4
Третья итерация записывает байты 2, 3, 4, 5
Последняя итерация записывает байты 3, 4, 5, 6
Поскольку в буфере было всего четыре байта для начала, вынаписал за пределами вашего буфера.Бум.
РЕДАКТИРОВАТЬ
Ниже приведены минимальные изменения, необходимые для избежания этой конкретной ошибки:
for(unsigned int b = 0; b < effective_length; b++)
{
unsigned int ui;
sscanf(source.data() + (b * 2), "%02x", &ui);
destination[b] = ui;
}