gpt4 book ai didi

c++ - 构造函数引用参数导致段错误

转载 作者:可可西里 更新时间:2023-11-01 17:44:48 26 4
gpt4 key购买 nike

我在 ROS 应用程序中使用以下代码。

class RobotisController
{
private:
....
public:
ros::NodeHandle pxxx;
}

RobotisController::RobotisController(ros::NodeHandle& nh) : pxxx(nh)
{
packetHandlerList.push_back(PacketHandler::getPacketHandler(1.0));
packetHandlerList.push_back(PacketHandler::getPacketHandler(2.0));
}


class RosWrapper {
protected:
Robotis::RobotisController controller_;
ros::NodeHandle nh_;
....

public:
RosWrapper() :
controller_(nh_) {}
}


main()
{
RosWrapper interface;
}

当我运行上面的代码时,它会导致 SIGSEGV。我尝试调试代码,当我到达 RobotisController 的构造函数时,我发现传递给构造函数的变量 nh 显示 cannot access memory,但内存已经分配在 RosWrapper 类中。

最佳答案

成员变量将按照类定义中声明的顺序进行初始化。这意味着 nh_ 将在 controller_ 之后被初始化。因此,传递一个未初始化的 nh_ 作为初始化 controller_ 的参数将导致 UB。

你可以改变声明的顺序:

class RosWrapper {
protected:
ros::NodeHandle nh_; // nh_ will be initialized firstly
Robotis::RobotisController controller_;
....

public:
RosWrapper() :
controller_(nh_) {}
}

关于c++ - 构造函数引用参数导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36733304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com