Я знаю из за чего возникает эта ошибка
все верно
валидность голого указателя проверить нельзя, присваивать специальное значение — тоже плохое решение. но в данном случае есть решение намного проще: сделать параметр функции константной ссылкой, тогда копия объекта создаваться не будет.
голыми указателями для управления памятью вообще пользоваться очень не рекомендуется чтобы избежать огромного слоя ошибок, для этого давно придумали «умные» указатели (std::unique_ptr, std::shared_ptr).
кстати, выражение *buffer = NULL; в данном случае ошибочное, т.к. разыменовывается «мусорный» указатель.
P.S. для оформления кода есть специальный тэг: [ code=cpp]код [ /code] (только пробелы после [ убрать)