Вы выделяете экземпляр context_t
в куче, а затем msg->context_var.type
получает значение результирующего указателя f
.
Поскольку msg
является параметром-указателем для функции send_Message
, нельзя сделать надежных предположений о том, что делается с msg
и его содержимым после существования вашей функции. Таким образом, когда вы продолжаете освобождать память, указанную f
, вы оставляете висячий указатель в msg->context_var.type
.
Если доступ к памяти, на которую он указывает, доступен после того, как send_Message существует, есть большая вероятность, что вы испортили что-то жизненно важное (или прочитали что-то сумасшедшее, например указатель на 0xdeadbeef), поскольку оно может теперь содержать что-то совершенно другое.