При выполнении проверок Valgrind я получаю «Недопустимое чтение размера 8», которое указывает на использование memcpy. Поле назначения является пустой неинициализированной структурой. Источник - это та же структура, которая является членом другой структуры.
Т.е. Destination = Bar, Source = Foo-> Bar.
Я предполагаю, что проблема связана с размером arg в memcpy. Я пытался использовать sizeof (Foo-> Bar), sizeof (Bar) и sizeof (Bar_s).
В шапке:
struct Foo_s
{
Bar_t payload;
//other structs and variables
};
typedef struct
{
uint64_t timestamp;
uint16_t id;
} Bar_t;
В файле c:
//Foo_s is passed into the function already populated, let's call it foo_data
Bar_t payload_data;
memcpy(&payload_data, &(foo_data->payload_data), sizeof(foo_data->payload_data));
Я получаю ожидаемое поведение, однако Вальгринду, похоже, не нравится, как это делается.
Вот ошибка:
Thread 36 function_name:47/101:
==774== Invalid read of size 8
==774== at 0x1C1E59: function_name (in /path/to/exe)
==774== by 0x189065: another_function (in /path/to/exe)
==774== by 0x5D544A3: another_function2 (pthread_create.c:456)
==774== Address 0x40bb6b8 is on thread 11's stack
==774== 1896 bytes below stack pointer