C++程序VS运行正常,Matrix平台GCC报Mismatched free()/delete错误求助
问题根因
Valgrind报错明确指向new[]和delete不匹配:你用数组版本的new[]申请的内存,却用了非数组版本的delete释放,属于C++标准规定的未定义行为。Visual Studio的运行时对这类未定义行为容错性较高,所以表面运行正常,但GCC+Valgrind会严格检测到这类内存管理错误。
错误位置&修复方案
共有两处内存释放不匹配的问题:
- 第一处在
Country::addCity函数中:m_city始终是通过new City[]分配的数组,释放时必须用数组版本的delete[],你写的是delete m_city;,修改为:
delete[] m_city;
- 第二处在
Country::setName函数中:m_name是通过new char[]分配的字符数组,释放时必须用数组版本的delete[],你写的是delete m_name;,修改为:
delete[] m_name;
额外说明
你的析构函数里的释放逻辑是正确的:delete[] m_name和delete[] m_city都使用了数组版本,不需要修改。
修改完上述两处问题后,Valgrind的 mismatch 报错就会消失,程序在GCC环境下也能正常运行。
内容的提问来源于stack exchange,提问作者Sufiyan Mustafa
相关产品推荐
相关产品推荐

