You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法释放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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:35:09