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

构造函数为无关变量分配相同内存地址致双重释放崩溃

双重释放内存引发段错误:无关变量被分配相同内存地址

程序运行时触发SEGFAULT段错误,根源是两个无关变量被不同构造函数分配了相同内存地址,后续各自的析构函数重复释放该内存,导致双重释放问题。已通过调试器和打印日志确认问题,但无法隔离出独立测试用例,仅能提供以下信息:


相关代码片段

1. readMany 模板函数

template<typename N>
N* readMany( const json::Value& jsonSource, std::size_t size ) {
    N* result = new N[size];
    
    // 调试打印
    std::cout << "result: " << result << std::endl;
    std::cout << std::flush;
    
    for( size_t i = 0; i < size; i++ ) {
        auto number = jsonSource.get( i, false );
        result[i] = static_cast<N>( number.asFloat() );
    }
    
    return result;
}

2. Value 类默认构造函数

Value::Value() {
    element = new JsonNull();
    // 调试打印
    std::cout << "Constructor call: " << element << std::endl;
    std::cout << std::flush; 
}

调试输出日志

Constructor call: 0x55dd64bfddb0
Constructor call: 0x55dd64c23040
Constructor call: 0x55dd64c23060
Constructor call: 0x55dd64c23080
Constructor call: 0x55dd64c23040
Constructor call: 0x55dd64c23060
Constructor call: 0x55dd64c23080
result: 0x55dd64c23060 <-- 此处地址重复
Constructor call: 0x55dd64c23080
Constructor call: 0x55dd64c23060 <-- 此处地址再次重复
Constructor call: 0x55dd64c23040

从日志可见:readMany 分配的数组地址 0x55dd64c23060,与 Value 构造函数分配的 element 地址完全相同。


补充的析构函数代码

Value 类析构函数

Value::~Value() {
    delete element;
}

NumberArray 类析构函数

NumberArray::~NumberArray() {
    delete[] array;
}

内容的提问来源于stack exchange,提问作者Felix.leg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:22:39