Судя по вашей информации, у вас неправильные ожидания:
Однако значение в исходном кадре не изменяется.
То, что вы показываете нам, это:
Сначала вы подготовите структуру для кадра CAN:
struct can_frame frame2;
frame2.can_id = 0x124;
frame2.can_dlc = 8;
frame2.data[0] = 0x00;
...
Затем вы помещаете эту структуру в массив:
struct can_frame frames[2];
frames[0] = frame;
frames[1] = frame2;
Это делается путем копирования содержимого вашей структуры в массив. Нет обратной ссылки на область памяти, откуда пришли ваши данные.
Затем вы меняете скопированные данные:
struct can_frame* to_change = &(frames[change_frame]);
...
to_change->data[somewhatRandomNumber] = anotherRandomNumber;
Теперь вы ожидаете, что оригинальный кадр изменится. Это не произойдет.
После копирования данных из одного местоположения в другое местоположение (что происходит в назначении) у вас есть 2 абсолютно независимых местоположения с одинаковым содержимым.
Если вы меняете одно место, другое место не затрагивается.
Если вы хотите изменить frame2
, вы должны изменить frame2
напрямую. Это оставит вашу копию в массиве нетронутой. Возможно, вам придется изменить оба места.
Вы также можете изменить свой массив, чтобы он содержал указатели на исходные структуры. Тогда у вас есть только одно местоположение с данными.