это утечка памяти:
buf = p;
, поскольку она накладывает один из указателей на выделенную память.
Однако из-за вышеприведенного оператора этот оператор:
free(buf);
вызовет программу cra sh, потому что память, указанная как buf
, уже передана free()
, поэтому две ошибки в опубликованном коде.
Чтобы все это исправить, удалите это утверждение:
buf = p;