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

C++将已实例化Display类传入Triangle类调用方法出现段错误如何解决

问题根源

你的代码核心问题是变量命名遮蔽:Triangle类构造函数的形参名和类的私有成员变量名都是display,赋值语句display=display实际是把形参自己赋值给形参,类持有的Display*成员变量完全没有被初始化,属于野指针。调用DrawTriangle时通过野指针访问内存自然会触发段错误,也不可能读到原Display对象的成员值。

修复方案

二选一即可:

  • 方法1:修改构造函数形参名,避免命名冲突
// triangle.cpp 构造函数修改为如下实现
Triangle::Triangle(Display* input_display) {
    display = input_display;
}
  • 方法2:用this指针明确指定要赋值的是类成员变量
// triangle.cpp 构造函数修改为如下实现
Triangle::Triangle(Display* display) {
    this->display = display;
}

优化建议

  • 可以给类成员变量加统一前缀(比如m_),例如将成员指针命名为m_display,从命名规则层面彻底避免这类遮蔽问题,也方便后续代码维护
  • 调用指针前可以增加非空判断,避免空指针访问导致的崩溃问题

内容的提问来源于stack exchange,提问作者Sean Payne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 19:54:05