Из OpenSSL документов , BN_CTX_end()
должен вызываться до BN_CTX_free()
, однако в приведенном ниже примере я получаю исключение неверного доступа при запуске программы в порядке, указанном в документах ( обратите внимание, что в документах написано в большинстве случаев , но я не уверен, как проверить, следует ли мне звонить BN_CTX_end()
до BN_CTX_free()
)
BIGNUM* util::math::find_seed_num(std::vector<int> lst, int lst_int, int index) {
//python: reduce((lambda x, y: x * y), lst[0:index]) % lst_int
BN_CTX* ctx;
ctx = BN_CTX_new();
cout << "\nsize of lst " << lst.size() << "\n";
BIGNUM *sum = BN_new();
BIGNUM *tmp = BN_new();
sum = BN_CTX_get(ctx);
BN_set_word(sum, lst[0]);
cout << "\n index: " << index << "\n";
for (int a = 1; a < index; a = a + 1) {
BN_set_word(tmp, lst[a]);
cout << "temp = " << BN_bn2dec(tmp) << "\n";
BN_mul(sum, sum, tmp, ctx);
cout << "sum = " << BN_bn2dec(sum) << "\n";
}
BIGNUM *result = BN_new();
BIGNUM *modulo = BN_new();
BN_set_word(modulo, lst_int);
BN_nnmod(result, sum, modulo, ctx);
cout << "\nsum: " << BN_bn2dec(result) << "\n";
BN_free(sum);
BN_free(result);
BN_free(modulo);
BN_free(tmp);
BN_CTX_end(ctx); //Running this produces the exception
BN_CTX_free(ctx); //Running this w/out the above line leads to no exception thrown
return result;
}
Я новичок в C ++, поэтому меня беспокоит то, что контекст не освобождается должным образом, если BN_CTX_end();
не вызывается.