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

结构体KhoiGach及函数返回值问题:TaoKhoiGach函数实现失败求助

问题分析与修复方案

你的代码里有两个核心错误,正是它们导致程序运行失败,咱们一步步拆解修复:

1. 成员函数定义的语法错误

你在实现TaoKhoiGach时,错误地用了成员指针的语法:

KhoiGach DesignBrick :: *TaoKhoiGach(int ID) { ... }

这行代码的意思是“声明一个指向DesignBrick类中KhoiGach类型成员的指针”,但你实际要写的是返回KhoiGach*的成员函数,正确的语法应该把*放在返回类型后面:

KhoiGach* DesignBrick::TaoKhoiGach(int ID) { ... }

2. 返回无效的局部变量地址

函数内部你用new创建了堆上的KhoiGach对象,但最后返回的是&pkhoigach——也就是局部指针变量本身的地址。当函数执行完毕,局部变量pkhoigach会被销毁,这个地址就变成了无效的野指针,后续使用必然导致崩溃或未定义行为。

正确的做法是直接返回pkhoigach,因为它指向的是堆内存分配的对象,函数结束后堆内存不会自动释放(后续记得用delete回收即可)。

修正后的完整代码

// 假设MaxI和MaxJ已经提前定义
struct KhoiGach { 
    int **arr; 
    int Row,Col; 
    int iBoard,jBoard; 
}; 

class DesignBrick { 
public: 
    DesignBrick(); 
    virtual ~DesignBrick(); 
    int Board[MaxI][MaxJ]; 
    KhoiGach pkhoigach; 
    KhoiGach *TaoKhoiGach(int ID); 
}; 

// 修正后的成员函数实现
KhoiGach* DesignBrick::TaoKhoiGach(int ID) { 
    KhoiGach *newBrick = new KhoiGach; 
    // 这里可以根据ID初始化KhoiGach的成员,比如arr、Row等
    return newBrick; 
}

额外提示

  • 记得在不再使用返回的KhoiGach*指针时,调用delete释放内存,避免内存泄漏。如果可以的话,建议用智能指针(比如std::unique_ptr<KhoiGach>)自动管理内存,减少手动释放的风险。
  • 类里的成员变量pkhoigach和函数里的局部指针同名,虽然语法合法,但容易混淆,建议给局部变量换个更清晰的名字(比如上面的newBrick)。

内容的提问来源于stack exchange,提问作者Quân Tiến

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:03:40