Проблема: утечка
char *result_str = new char;
Выделяет один символ указывает result_str
на него.
result_str = BN_bn2hex(point_compressed_dec);
переназначает result_str
, чтобы указать на что-то, возвращенное BN_bn2hex
, которое может или не может быть delete
-поддерживаемым. Единственный символ, назначенный в строке выше, просочился, потому что ничто больше не указывает на это.
Решение: утечка
Не выделяйте этого персонажа. Тебе это не нужно. Вместо этого присвойте результат BN_bn2hex
непосредственно result_str
.
char *result_str = BN_bn2hex(point_compressed_dec);
Проблема: удалить
После
result_str = BN_bn2hex(point_compressed_dec);
result_str
указывает на строку, возвращаемую BN_bn2hex
. Поскольку вы не знаете, как была выделена память (вы можете только безопасно delete
то, что было new
ed), вы не можете безопасно освободить ее самостоятельно. В документации для BN_bn2hex
содержится указание освободить эту память с помощью OPENSSL_free
.
Решение: удалить
Не delete
. Вместо этого следуйте инструкциям в документации и используйте OPENSSL_free
.
Sidenote
Убедитесь, что result_str
не NULL
, прежде чем пытаться его использовать. Если результат NULL
, используйте ERR_get_error
, чтобы выяснить, почему.