の原因となります。同様に、このよう:のshared_ptr <EVP_PKEY>が、これは私が持っているもので、基本的にヒープ破損
shared_ptr<EVP_PKEY> evpKeyPtr{EVP_PKEY_new(), EVP_PKEY_free};
//same code as above to get key from file
EVP_PKEY_free(evpKeyPtr.get());
//evpKeyPtr does not go out of scope before the corruption occurs
しかし、これにはない:
EVP_PKEY* evpKey = EVP_PKEY_new();
//same code as above to get key from file
EVP_PKEY_free(evpKey);
私は、これが発生する可能性が理由として損失でいます。私は第二のコードが忠告されていないことを知っていますが、何が起こるかをテストするためにそれを行いました。
問題を再現するコンパイル可能な実行可能なテストケースを投稿する必要があります。 – xaxxon
'std :: shared_ptr evpKeyPtr(EVP_PKEY_new()、[](EVP_PKEY * p){EVP_PKEY_free(p);});'? –
C++ 11と 'unique_ptr'を試してみてください。私は頻繁にそれを使用し、それが動作することを知っている。私はC++ 03と 'shared_ptr'パターンを試みたことはありません。これがうまくいくには、 'release'(' get'ではなく): 'EVP_PKEY_free(evpKeyPtr.release()) 'を呼び出す必要があると思います。 'release'を呼び出すと、もう' evpKeyPtr'を使うことはできません。 – jww