Приветствую!
Нужно сдвигать массив влево-вправо (не циклически, выпирающие элементы удаляются)
Для этого сделал вот такой код:
int N = MIN( (len-index), (QUEUE_SIZE-index2) );
memmove(buf+index2, buf+index, N * sizeof(int) );
Где
- buf - статический массив (для примера указан int, в реале void*),
- QUEUE_SIZE - его длина
- len - индекс последнего реально существующего элемента
- index - откуда
- index2 - куда
- N - вычисляется сколько элементов нужно переместить
Вот как это выглядит:
QUEUE_SIZE = 12
len = 10
m[12]= 1_2_3_4_5_6_7_8_ 9_10_0_0
_____________|_______|_________________
__________index___index2_____________
index = 2 - откуда
index2 = 5 - куда
В результате должно получиться вот так:
m[12]= 1 2 0 0 0 3 4 5 6 7 8 9
Всё так и получается, но на stm32 иногда в buf[0] появляется NULL, хотя быть его там не должно, причём все остальные элементы совпадают и на нужных местах. Длина len при этом то же совпадает. Какие могут быть подводные камне memmove() или где я мог накосячить?
Вот примерный код целиком для экспериментов:
cpp.sh/9e436
P.S. размер стека и кучи друг друга не перекрывает, памяти хватает.