无法释放OpenSSL SHA256函数返回的char指针的技术咨询
解决OpenSSL SHA256返回指针的内存释放问题
嘿,这个问题我之前也踩过坑!当你给SHA256函数的第三个参数传NULL时,它内部是用OpenSSL专属的OPENSSL_malloc()来分配内存的,不是标准C库的malloc(),所以直接用free()肯定搞不定,甚至还可能触发内存错误或者崩溃。
正确的释放方式
你需要用OpenSSL提供的OPENSSL_free()函数来释放这个指针,记得先包含<openssl/crypto.h>头文件,不然编译器会找不到这个函数的定义。
完整示例代码
#include <stdio.h> #include <string.h> #include <openssl/sha.h> #include <openssl/crypto.h> // 必须包含这个头文件才能使用OPENSSL_free int main() { const char* input_str = "测试SHA256哈希计算"; unsigned char* sha256_hash = SHA256((const unsigned char*)input_str, strlen(input_str), NULL); if (sha256_hash != NULL) { // 打印哈希值示例 printf("SHA256哈希值: "); for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) { printf("%02x", sha256_hash[i]); } printf("\n"); // 释放内存的正确姿势 OPENSSL_free(sha256_hash); } return 0; }
编译注意事项
编译的时候还是要带上-lcrypto链接选项,比如:
gcc sha256_test.c -o sha256_test -lcrypto
关键提醒
永远不要混用不同的内存分配器:
- OpenSSL分配的内存(
OPENSSL_malloc())→ 用OPENSSL_free()释放 - 标准C库分配的内存(
malloc()/calloc())→ 用free()释放 - C++的
new分配的内存 → 用delete释放
混用会导致内存泄漏、程序崩溃等各种奇怪问题。
内容的提问来源于stack exchange,提问作者doc_id
相关产品推荐
相关产品推荐

