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

X509_STORE_CTX_init是否释放传入对象?动态创建后需手动释放吗?

OpenSSL X509_STORE_CTX动态创建后的释放规则

核心结论

动态创建的X509_STORE_CTX是否需要手动释放,完全取决于X509_STORE_CTX_init()的执行结果:

  • 初始化成功:必须手动调用X509_STORE_CTX_free()释放资源,X509_STORE_CTX_init()不会自动处理。
  • 初始化失败:X509_STORE_CTX_init()会自动调用X509_STORE_CTX_free()销毁这个动态对象,你不需要再手动释放。

代码示例

// 动态分配X509_STORE_CTX对象
X509_STORE_CTX *ctx = X509_STORE_CTX_new();
if (ctx == NULL) {
    // 内存分配失败的错误处理
    return -1;
}

// 执行初始化操作
int init_ret = X509_STORE_CTX_init(ctx, store, cert, chain);
if (init_ret != 1) {
    // 初始化失败:ctx已被自动释放,无需再调用X509_STORE_CTX_free()
    return -1;
}

// 此处执行证书验证等业务逻辑...

// 操作完成后,手动释放动态创建的ctx
X509_STORE_CTX_free(ctx);

补充说明(栈创建报错的原因)

官方不推荐栈上创建X509_STORE_CTX的本质原因是:X509_STORE_CTX_init()初始化失败时,会调用X509_STORE_CTX_free()释放传入的ctx对象——而栈内存属于进程栈空间,不能用针对堆内存的free()系列函数操作,这直接导致了你遇到的段错误。

内容的提问来源于stack exchange,提问作者Thundercleez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:37:05