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

ROS全局规划器makePlan内调用getRobotPose报bad_alloc错误

问题原因

你的代码存在类成员变量和函数形参重名导致赋值失效的问题:
你在头文件中定义了类成员变量 costmap_2d::Costmap2DROS *costmap_ros;,同时initialize函数的传入形参也命名为costmap_ros,因此你在函数内写的costmap_ros = costmap_ros;本质是把形参自己赋值给自己,类的成员变量完全没有被正确赋值,属于未初始化的野指针。

  • initialize函数执行时调用的是形参传入的有效指针,所以调用getRobotPose不会报错;
  • makePlan函数执行时调用的是类未初始化的成员变量costmap_ros,访问野指针触发内存错误,抛出bad_alloc异常。

修复方案

修改initialize函数内的赋值逻辑,明确指定给类成员变量赋值,两种实现方式均可:

  1. 加this指针明确区分成员变量和形参:
void GlobalPlanner::initialize(std::string name, costmap_2d::Costmap2DROS* costmap_ros){
    nh_ = ros::NodeHandle{"~abcd"};
    // 明确给类成员变量赋值
    this->costmap_ros  = costmap_ros;
    costmap_ros_ = this->costmap_ros->getCostmap(); 
    // 后续代码保持不变
}
  1. 修改形参名避免重名冲突:
void GlobalPlanner::initialize(std::string name, costmap_2d::Costmap2DROS* costmap_ros_in){
    nh_ = ros::NodeHandle{"~abcd"};
    costmap_ros  = costmap_ros_in;
    costmap_ros_ = costmap_ros->getCostmap(); 
    // 后续代码保持不变
}

编码规范建议

日常开发中可以给类成员变量统一加标识前缀(如m_)或后缀(如_),避免和形参、局部变量重名,从根源上规避这类错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 05:24:03