Используйте new/delete вместо malloc()/free()
Нет гарантии, что оператор new()
вызывает malloc() при запросе памяти для себя. Он может реализовывать свою собственную функцию управления памятью. Следовательно, возникает трудно обнаруживаемая ошибка при передаче функцией free()
памяти, полученной при помощи new (и наоборот).
Избегайте неприятностей, используя всегда при работе с Си++ new и delete. Наряду с прочим, это означает, что вы не должны пользоваться strdup() или любой другой функцией, скрывающей вызов malloc().