结构体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
相关产品推荐
相关产品推荐

