За исключением определенных интерфейсов, обычно случается, что вызовы операционной системы не полагаются на пространство пользователя, чтобы поддерживать структуры данных, влияющие на их работу после их завершения.Исключения будут изложены на страницах руководства.
В частности, sendmsg
позволяет рассчитывать на немедленный вызов - независимо от того, успешен он или нет.Поэтому нормально использовать динамически распределенный буфер, как вы делаете, и уничтожить его сразу после вызова.
В качестве примера одного исключения, aio_write(2)
специально предназначено для того, чтобы пользовательское пространство могло поставить в очередь операцию записи, которая будет выполняться асинхронно.Для этого вызова данные не используются до тех пор, пока они не будут успешно записаны.Следовательно, вы не должны изменять структуры данных, представленные в вызове, пока не подтвердите, что он завершен.Это предупреждение вызывается в разделе NOTES
страницы справочника:
... Блок управления не должен изменяться во время выполнения операции записи.Записываемая область буфера не должна быть доступна во время операции, иначе могут возникнуть неопределенные результаты.Соответствующие области памяти должны оставаться действительными.
В итоге: проверьте страницу руководства для системного вызова.Но в большинстве случаев вам не нужно об этом беспокоиться.