В части 3, это правильный способ проверить, если (! Params). Любая ошибка здесь не рассматривается?
Да, это правильно, поскольку malloc()
возвращает NULL при ошибке.
В части 6 я даю 2 варианта - if (params)) и если (params! = NULL). Они одинаковы?
Да, они одинаковы. Но в C ++ есть несколько причин использовать nullptr
(правильный тип nullptr_t
) вместо NULL.
В первой части struct содержит указатель (p1) и не указатель (p2),В чем разница между свободным указателем, свободным не указателем и свободной комбинацией обоих?
На самом деле, вы не можете и не можете освободить не указатель. В вашем случае вы освобождаете только один указатель, который является указателем на структуру cipher_params_t
. С malloc()
вы выделяете память для содержания cipher_params_t
независимо от содержимого, вы просто выделяете достаточно места для его хранения. И когда вы free()
, вы освобождаете выделенную память, независимо от того, что содержит структура. Обратите внимание, что malloc()
и free()
не вызывают конструкторы / деструкторы ни для остроконечной структуры, ни для ее содержимого. Они просто резервируют / выделяют пространство памяти.
Если я использую delete [] вместо free (). Как? а какая разница?
Никогда не смешивайте malloc()
/ free()
, new
/ delete
и new[]
/ delete[]
, потому что они не делают одно и то же. Вы должны прочитать В чем разница между new / delete и malloc / free? для получения дополнительной информации.