में संदर्भ को मुक्त/आवंटित करने का सही तरीका मैं अपने प्रोग्राम में ओपन एसएसएल का उपयोग कर रहा हूं, एईएस सिफर का उपयोग करके डेटा एन्क्रिप्ट और डिक्रिप्ट करने के लिए। फिलहाल थोड़ी मेमोरी रिसाव है, इसलिए मैं इसे ठीक करने का एक तरीका ढूंढ रहा हूं।ओपनएसएसएल
EVP_CIPHER_CTX_new
यह examples
लेकिन में OpenSSL विकि पृष्ठ पर था: मेरे एन्क्रिप्ट डिक्रिप्ट दिनचर्या में, मैं संदर्भों तो
EVP_CIPHER_CTX_free(ctx);
की तरह मुक्त और के द्वारा बनाई गई है! मैन पेज पर, EVP_CIPHER_CTX_cleanup
और EVP_CIPHER_CTX_init
फ़ंक्शंस का उपयोग करने के लिए एक सुझाव है। तो मूल रूप से उपयोग करने के लिए सही क्या होना चाहिए, EVP_CIPHER_CTX_new
/EVP_CIPHER_CTX_free
किसी भी तरह से बहिष्कृत है? और EVP_CIPHER_CTX_new
/EVP_CIPHER_CTX_free
और EVP_CIPHER_CTX_init
/EVP_CIPHER_CTX_cleanup
के बीच कोई बड़ा अंतर है?
if(!(ctx = EVP_CIPHER_CTX_new())) return -1;
if(1 != EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
{
EVP_CIPHER_CTX_free(ctx);
return -1;
}
if(1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len))
{
EVP_CIPHER_CTX_free(ctx);
return -1;
}
ciphertext_len = len;
if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) { EVP_CIPHER_CTX_free(ctx); return -1; }
ciphertext_len += len;
EVP_CIPHER_CTX_free(ctx);
यह मुझे लगता है कि विपरीत है। वास्तव में openssl-1.1.0 EVP_CIPHER_CTX को एक अपारदर्शी प्रकार बनाता है, इसलिए उपरोक्त पहला फॉर्म एक संकलन त्रुटि – pixelbeat
है, इस उत्तर में यह अन्य उत्तरों में बताए गए बिल्कुल पीछे है। कृपया इसे अपडेट या अस्वीकार करें। – rdb