Um bson_t pode conter seus dados diretamente ou pode conter ponteiros para memória alocada por heap. Substituir um bson_t existente ou permitir que um bson_t alocado na pilha saia do escopo pode causar um vazamento de memória. Um bson_t deve sempre ser destruído com bson_destroy.
Parâmetros de saída bson_t
Um ponteiro bson_t usado como parâmetro de saída deve ponto para um armazenamento substituível válido para um novo bson_t, que deve ser um dos seguintes:
Armazenamento não inicializado para um bson_t.
Um objeto bson_t inicializado com zero.
Um objeto bson_t inicializado
BSON_INITIALIZER
com.Um objeto bson_t não criado com bson_new que foi destruído com bson_destroy.
Isso pode estar na pilha:
bson_t stack_doc = BSON_INITIALIZER; example_get_doc (&stack_doc); bson_destroy (&stack_doc);
Ou no montão:
bson_t *heap_doc = bson_malloc (sizeof (bson_t)); example_get_doc (heap_doc); bson_destroy (heap_doc); bson_free (heap_doc);
A omissão de bson_destroy em ambos os casos pode causar vazamentos de memória.
Aviso
Passar um ponteiro bson_t obtido de bson_new como parâmetro de saída resultará em um vazamento da estrutura bson_t.
bson_t *heap_doc = bson_new (); example_get_doc (heap_doc); bson_destroy (heap_doc); // Leaks the `bson_t` struct!