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

C++中动态分配对象后用delete[]触发Segmentation fault问题求助

问题排查:堆内存释放触发Segmentation Fault的原因

兄弟,你的问题其实是C++内存管理里最容易踩的经典坑之一——内存分配和释放的操作完全不匹配!

咱们来拆解下问题:

  • 你用new PolyCRTBuilder(parms)创建的是单个堆对象,对应的释放操作必须是delete(不带方括号)
  • 而delete[]是专门用来释放用new[]创建的数组对象的。你强行用delete[]去释放单个new出来的对象,会让程序错误解析内存布局,直接触发段错误(Segmentation Fault)。

修正后的代码

把释放语句里的方括号去掉就行:

PolyCRTBuilder *test2 = new PolyCRTBuilder(parms);
cout << "test2 variable created" << endl;
delete test2; // 这里替换原来的delete[]
cout << "test2 variable deleted" << endl;

额外建议:避免手动管理内存

如果你的C版本支持(C11及以上),尽量用智能指针来彻底避免这类手动内存管理的错误,比如std::unique_ptr:

#include <memory>
// ...
std::unique_ptr<PolyCRTBuilder> test2 = std::make_unique<PolyCRTBuilder>(parms);
cout << "test2 variable created" << endl;
// 完全不需要手动调用delete,智能指针会在对象生命周期结束时自动释放内存
cout << "test2 will be deleted automatically when it goes out of scope" << endl;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:02:44