When working with libcaosdb’s C API keep the following in mind. Delete all objects (transactions, entities, properties, parents, …) that you created using a caosdb_…_create_… function or released using a caosdb_…_release_… and only those. This means, that any objects set by a caosdb_…_get_… function, are managed by another owning object (e.g., a connection object managed by the connection manager) should not be deleted manually.
The underlying reason is that all C++ objects are realized in the Extern C interface as mutable structs containing a void pointer to the actuall C++ object which is not filled when initializing the struct but after calling a create function instead. If the C++ object wasn’t created using a create function, e.g., the parent object when getting a parent of an entity, it is owned by another object and deleted together with that object.