Это почти наверняка не работает нормально, это бессмысленно, и в C ++ способ распределения памяти - это новый и удаление, а не malloc и свободный.Нет необходимости проверять наличие пустого указателя (NULL), который четко определен как в C, так и в C ++.И ваше присвоение NULL параметру функции ничего не делает - оно только изменяет параметр, а не его значение обратно в вызывающей программе.
И, наконец, если вы обнаружите, что пишете такой код:
char * p = malloc(100);
safefree( p );
safefree( p );
нужно исправить код, чтобы дважды не освободить указатель, чтобы не запутывать вещи, прикрепляя пластырь к плохому коду.