Проблема здесь в том, что bl_add
может перераспределить bl_t*
, который передается в качестве аргумента, но он не может сообщить вызывающей стороне, что он это сделал, или каким должно быть новое значение аргумента. Таким образом, list
вызывающего абонента становится висящим указателем, и в следующий раз, когда он его использует, наступит хаос (или неопределенное поведение).
Одно из решений - вернуть новое значение list
(или * 1007). * в случае сбоя), требуя от вызывающего абонента написать:
list = bl_add(list, data);
Другая возможность - попросить вызывающего абонента передать указатель указателю list
(дескриптор "" "), позволяя bl_add
обновить указатель:
status = bl_add(&list, data);