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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:06:04