A bson_t puede contener sus datos directamente o punteros a memoria asignada al montón. Sobrescribir un bson_t existente o permitir que un bson_t asignado a la pila quede fuera de alcance puede causar una fuga de memoria. Un bson_t siempre debe destruirse con bson_destroy.
Parámetros de salida de bson_t
Un puntero bson_t utilizado como parámetro de salida debe apuntar a un almacenamiento sobrescribible válido para un nuevo bson_t que debe ser uno de los siguientes:
Almacenamiento no inicializado para un bson_t.
Un objeto bson_t inicializado en cero.
Un objeto bson_t inicializado con
BSON_INITIALIZER.Un objeto bson_t no creado con bson_new que fue destruido con bson_destroy.
Esto puede estar en la pila:
bson_t stack_doc = BSON_INITIALIZER; example_get_doc (&stack_doc); bson_destroy (&stack_doc);
O en el montón:
bson_t *heap_doc = bson_malloc (sizeof (bson_t)); example_get_doc (heap_doc); bson_destroy (heap_doc); bson_free (heap_doc);
Omitir bson_destroy en cualquier caso puede provocar pérdidas de memoria.
Advertencia
Pasar un puntero bson_t obtenido de bson_new como parámetro de salida dará como resultado una pérdida de la estructura bson_t.
bson_t *heap_doc = bson_new (); example_get_doc (heap_doc); bson_destroy (heap_doc); // Leaks the `bson_t` struct!