构造函数为无关变量分配相同内存地址致双重释放崩溃
双重释放内存引发段错误:无关变量被分配相同内存地址
程序运行时触发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
相关产品推荐
相关产品推荐

