mirror of
https://github.com/bkthomps/Containers.git
synced 2025-11-16 04:24:47 +00:00
Do nothing when freeing NULL (#141)
This commit is contained in:
@@ -203,7 +203,8 @@ bk_err array_get(void *const data, array me, const size_t index)
|
||||
|
||||
/**
|
||||
* Frees the array memory. Performing further operations after calling this
|
||||
* function results in undefined behavior.
|
||||
* function results in undefined behavior. Freeing NULL is legal, and causes
|
||||
* no operation to be performed.
|
||||
*
|
||||
* @param me the array to free from memory
|
||||
*
|
||||
|
||||
15
src/deque.c
15
src/deque.c
@@ -646,7 +646,8 @@ bk_err deque_clear(deque me)
|
||||
|
||||
/**
|
||||
* Destroys the deque. Performing further operations after calling this function
|
||||
* results in undefined behavior.
|
||||
* results in undefined behavior. Freeing NULL is legal, and causes no operation
|
||||
* to be performed.
|
||||
*
|
||||
* @param me the deque to destroy
|
||||
*
|
||||
@@ -654,11 +655,13 @@ bk_err deque_clear(deque me)
|
||||
*/
|
||||
deque deque_destroy(deque me)
|
||||
{
|
||||
size_t i;
|
||||
for (i = me->alloc_block_start; i <= me->alloc_block_end; i++) {
|
||||
free(me->data[i]);
|
||||
if (me) {
|
||||
size_t i;
|
||||
for (i = me->alloc_block_start; i <= me->alloc_block_end; i++) {
|
||||
free(me->data[i]);
|
||||
}
|
||||
free(me->data);
|
||||
free(me);
|
||||
}
|
||||
free(me->data);
|
||||
free(me);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -488,7 +488,8 @@ void forward_list_clear(forward_list me)
|
||||
|
||||
/**
|
||||
* Destroys the singly-linked list. Performing further operations after calling
|
||||
* this function results in undefined behavior.
|
||||
* this function results in undefined behavior. Freeing NULL is legal, and
|
||||
* causes no operation to be performed.
|
||||
*
|
||||
* @param me the singly-linked list to destroy
|
||||
*
|
||||
@@ -496,7 +497,9 @@ void forward_list_clear(forward_list me)
|
||||
*/
|
||||
forward_list forward_list_destroy(forward_list me)
|
||||
{
|
||||
forward_list_clear(me);
|
||||
free(me);
|
||||
if (me) {
|
||||
forward_list_clear(me);
|
||||
free(me);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -512,7 +512,8 @@ void list_clear(list me)
|
||||
|
||||
/**
|
||||
* Destroys the doubly-linked list. Performing further operations after calling
|
||||
* this function results in undefined behavior.
|
||||
* this function results in undefined behavior. Freeing NULL is legal, and
|
||||
* causes no operation to be performed.
|
||||
*
|
||||
* @param me the doubly-linked list to destroy
|
||||
*
|
||||
@@ -520,7 +521,9 @@ void list_clear(list me)
|
||||
*/
|
||||
list list_destroy(list me)
|
||||
{
|
||||
list_clear(me);
|
||||
free(me);
|
||||
if (me) {
|
||||
list_clear(me);
|
||||
free(me);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -886,7 +886,8 @@ void map_clear(map me)
|
||||
|
||||
/**
|
||||
* Frees the map memory. Performing further operations after calling this
|
||||
* function results in undefined behavior.
|
||||
* function results in undefined behavior. Freeing NULL is legal, and causes
|
||||
* no operation to be performed.
|
||||
*
|
||||
* @param me the map to free from memory
|
||||
*
|
||||
@@ -894,7 +895,9 @@ void map_clear(map me)
|
||||
*/
|
||||
map map_destroy(map me)
|
||||
{
|
||||
map_clear(me);
|
||||
free(me);
|
||||
if (me) {
|
||||
map_clear(me);
|
||||
free(me);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1075,7 +1075,8 @@ void multimap_clear(multimap me)
|
||||
|
||||
/**
|
||||
* Frees the multi-map memory. Performing further operations after calling this
|
||||
* function results in undefined behavior.
|
||||
* function results in undefined behavior. Freeing NULL is legal, and causes no
|
||||
* operation to be performed.
|
||||
*
|
||||
* @param me the multi-map to free from memory
|
||||
*
|
||||
@@ -1083,7 +1084,9 @@ void multimap_clear(multimap me)
|
||||
*/
|
||||
multimap multimap_destroy(multimap me)
|
||||
{
|
||||
multimap_clear(me);
|
||||
free(me);
|
||||
if (me) {
|
||||
multimap_clear(me);
|
||||
free(me);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -929,7 +929,8 @@ void multiset_clear(multiset me)
|
||||
|
||||
/**
|
||||
* Frees the multi-set memory. Performing further operations after calling this
|
||||
* function results in undefined behavior.
|
||||
* function results in undefined behavior. Freeing NULL is legal, and causes no
|
||||
* operation to be performed.
|
||||
*
|
||||
* @param me the multi-set to free from memory
|
||||
*
|
||||
@@ -937,7 +938,9 @@ void multiset_clear(multiset me)
|
||||
*/
|
||||
multiset multiset_destroy(multiset me)
|
||||
{
|
||||
multiset_clear(me);
|
||||
free(me);
|
||||
if (me) {
|
||||
multiset_clear(me);
|
||||
free(me);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -236,7 +236,8 @@ bk_err priority_queue_clear(priority_queue me)
|
||||
|
||||
/**
|
||||
* Frees the priority queue memory. Performing further operations after calling
|
||||
* this function results in undefined behavior.
|
||||
* this function results in undefined behavior. Freeing NULL is legal, and
|
||||
* causes no operation to be performed.
|
||||
*
|
||||
* @param me the priority queue to free from memory
|
||||
*
|
||||
@@ -244,7 +245,9 @@ bk_err priority_queue_clear(priority_queue me)
|
||||
*/
|
||||
priority_queue priority_queue_destroy(priority_queue me)
|
||||
{
|
||||
vector_destroy(me->data);
|
||||
free(me);
|
||||
if (me) {
|
||||
vector_destroy(me->data);
|
||||
free(me);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -174,7 +174,8 @@ bk_err queue_clear(queue me)
|
||||
|
||||
/**
|
||||
* Destroys the queue. Performing further operations after calling this function
|
||||
* results in undefined behavior.
|
||||
* results in undefined behavior. Freeing NULL is legal, and causes no operation
|
||||
* to be performed.
|
||||
*
|
||||
* @param me the queue to destroy
|
||||
*
|
||||
|
||||
@@ -849,7 +849,8 @@ void set_clear(set me)
|
||||
|
||||
/**
|
||||
* Frees the set memory. Performing further operations after calling this
|
||||
* function results in undefined behavior.
|
||||
* function results in undefined behavior. Freeing NULL is legal, and causes
|
||||
* no operation to be performed.
|
||||
*
|
||||
* @param me the set to free from memory
|
||||
*
|
||||
@@ -857,7 +858,9 @@ void set_clear(set me)
|
||||
*/
|
||||
set set_destroy(set me)
|
||||
{
|
||||
set_clear(me);
|
||||
free(me);
|
||||
if (me) {
|
||||
set_clear(me);
|
||||
free(me);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -158,7 +158,8 @@ bk_err stack_clear(stack me)
|
||||
|
||||
/**
|
||||
* Frees the stack memory. Performing further operations after calling this
|
||||
* function results in undefined behavior.
|
||||
* function results in undefined behavior. Freeing NULL is legal, and causes
|
||||
* no operation to be performed.
|
||||
*
|
||||
* @param me the stack to destroy
|
||||
*
|
||||
|
||||
@@ -440,7 +440,8 @@ int unordered_map_clear(unordered_map me)
|
||||
|
||||
/**
|
||||
* Frees the unordered map memory. Performing further operations after calling
|
||||
* this function results in undefined behavior.
|
||||
* this function results in undefined behavior. Freeing NULL is legal, and
|
||||
* causes no operation to be performed.
|
||||
*
|
||||
* @param me the unordered map to free from memory
|
||||
*
|
||||
@@ -448,8 +449,10 @@ int unordered_map_clear(unordered_map me)
|
||||
*/
|
||||
unordered_map unordered_map_destroy(unordered_map me)
|
||||
{
|
||||
unordered_map_clear(me);
|
||||
free(me->buckets);
|
||||
free(me);
|
||||
if (me) {
|
||||
unordered_map_clear(me);
|
||||
free(me->buckets);
|
||||
free(me);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -577,7 +577,8 @@ bk_err unordered_multimap_clear(unordered_multimap me)
|
||||
|
||||
/**
|
||||
* Frees the unordered multi-map memory. Performing further operations after
|
||||
* calling this function results in undefined behavior.
|
||||
* calling this function results in undefined behavior. Freeing NULL is legal,
|
||||
* and causes no operation to be performed.
|
||||
*
|
||||
* @param me the unordered multi-map to free from memory
|
||||
*
|
||||
@@ -585,9 +586,11 @@ bk_err unordered_multimap_clear(unordered_multimap me)
|
||||
*/
|
||||
unordered_multimap unordered_multimap_destroy(unordered_multimap me)
|
||||
{
|
||||
unordered_multimap_clear(me);
|
||||
free(me->iterate_key);
|
||||
free(me->buckets);
|
||||
free(me);
|
||||
if (me) {
|
||||
unordered_multimap_clear(me);
|
||||
free(me->iterate_key);
|
||||
free(me->buckets);
|
||||
free(me);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -501,7 +501,8 @@ bk_err unordered_multiset_clear(unordered_multiset me)
|
||||
|
||||
/**
|
||||
* Frees the unordered multi-set memory. Performing further operations after
|
||||
* calling this function results in undefined behavior.
|
||||
* calling this function results in undefined behavior. Freeing NULL is legal,
|
||||
* and causes no operation to be performed.
|
||||
*
|
||||
* @param me the unordered multi-set to free from memory
|
||||
*
|
||||
@@ -509,8 +510,10 @@ bk_err unordered_multiset_clear(unordered_multiset me)
|
||||
*/
|
||||
unordered_multiset unordered_multiset_destroy(unordered_multiset me)
|
||||
{
|
||||
unordered_multiset_clear(me);
|
||||
free(me->buckets);
|
||||
free(me);
|
||||
if (me) {
|
||||
unordered_multiset_clear(me);
|
||||
free(me->buckets);
|
||||
free(me);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -393,7 +393,8 @@ int unordered_set_clear(unordered_set me)
|
||||
|
||||
/**
|
||||
* Frees the unordered set memory. Performing further operations after calling
|
||||
* this function results in undefined behavior.
|
||||
* this function results in undefined behavior. Freeing NULL is legal, and
|
||||
* causes no operation to be performed.
|
||||
*
|
||||
* @param me the unordered set to free from memory
|
||||
*
|
||||
@@ -401,8 +402,10 @@ int unordered_set_clear(unordered_set me)
|
||||
*/
|
||||
unordered_set unordered_set_destroy(unordered_set me)
|
||||
{
|
||||
unordered_set_clear(me);
|
||||
free(me->buckets);
|
||||
free(me);
|
||||
if (me) {
|
||||
unordered_set_clear(me);
|
||||
free(me->buckets);
|
||||
free(me);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -489,7 +489,8 @@ bk_err vector_clear(vector me)
|
||||
|
||||
/**
|
||||
* Frees the vector memory. Performing further operations after calling this
|
||||
* function results in undefined behavior.
|
||||
* function results in undefined behavior. Freeing NULL is legal, and causes
|
||||
* no operation to be performed.
|
||||
*
|
||||
* @param me the vector to free from memory
|
||||
*
|
||||
@@ -497,7 +498,9 @@ bk_err vector_clear(vector me)
|
||||
*/
|
||||
vector vector_destroy(vector me)
|
||||
{
|
||||
free(me->data);
|
||||
free(me);
|
||||
if (me) {
|
||||
free(me->data);
|
||||
free(me);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -160,4 +160,5 @@ void test_array(void)
|
||||
#endif
|
||||
test_big_object();
|
||||
test_add_all();
|
||||
array_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -674,4 +674,5 @@ void test_deque(void)
|
||||
test_block_reuse_forwards();
|
||||
test_block_reuse_backwards();
|
||||
test_trim_both_sides();
|
||||
deque_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -444,4 +444,5 @@ void test_forward_list(void)
|
||||
assert(test_puzzle_backwards(2, 10) == 5);
|
||||
test_big_object();
|
||||
test_add_all();
|
||||
forward_list_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -432,4 +432,5 @@ void test_list(void)
|
||||
assert(test_puzzle_backwards(2, 10) == 5);
|
||||
test_big_object();
|
||||
test_add_all();
|
||||
list_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -711,4 +711,5 @@ void test_map(void)
|
||||
#endif
|
||||
test_big_object();
|
||||
test_ordered_retrieval();
|
||||
map_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -786,4 +786,5 @@ void test_multimap(void)
|
||||
#endif
|
||||
test_big_object();
|
||||
test_ordered_retrieval();
|
||||
multimap_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -715,4 +715,5 @@ void test_multiset(void)
|
||||
#endif
|
||||
test_big_object();
|
||||
test_ordered_retrieval();
|
||||
multiset_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -239,4 +239,5 @@ void test_priority_queue(void)
|
||||
test_push_out_of_memory();
|
||||
#endif
|
||||
test_big_object();
|
||||
priority_queue_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -188,4 +188,5 @@ void test_queue(void)
|
||||
assert(test_puzzle(2, 5) == 4);
|
||||
assert(test_puzzle(2, 10) == 5);
|
||||
test_big_object();
|
||||
queue_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -683,4 +683,5 @@ void test_set(void)
|
||||
#endif
|
||||
test_big_object();
|
||||
test_ordered_retrieval();
|
||||
set_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -112,4 +112,5 @@ void test_stack(void)
|
||||
test_basic();
|
||||
test_automated_trim();
|
||||
test_big_object();
|
||||
stack_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -355,4 +355,5 @@ void test_unordered_map(void)
|
||||
test_clear_out_of_memory();
|
||||
#endif
|
||||
test_big_object();
|
||||
unordered_map_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -478,4 +478,5 @@ void test_unordered_multimap(void)
|
||||
test_clear_out_of_memory();
|
||||
#endif
|
||||
test_big_object();
|
||||
unordered_multimap_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -402,4 +402,5 @@ void test_unordered_multiset(void)
|
||||
test_clear_out_of_memory();
|
||||
#endif
|
||||
test_big_object();
|
||||
unordered_multiset_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -342,4 +342,5 @@ void test_unordered_set(void)
|
||||
test_clear_out_of_memory();
|
||||
#endif
|
||||
test_big_object();
|
||||
unordered_set_destroy(NULL);
|
||||
}
|
||||
|
||||
@@ -354,4 +354,5 @@ void test_vector(void)
|
||||
#endif
|
||||
test_big_object();
|
||||
test_add_all();
|
||||
vector_destroy(NULL);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user