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
相关产品推荐
相关产品推荐

