现在我有QList
个protobuf消息。在while循环中,我创建消息并将它们添加到QList
。我尝试使用DebugString
方法将它们打印出来,在while循环中它可以正常工作而没有错误。当我尝试在while循环之外调用完全相同的->DebugString()
方法时,我得到:
中止(Core dumped)。
名为terminate的纯虚方法在没有活动的情况下调用 例外
QList<const ::google::protobuf::Message*> allMessages;
while() {
msgs::sensor::Plot nextMsg;
....
allMessages.append(&nextMsg);
std::cout << allMessages.at(0)->DebugString();
}
std::cout << allMessages.at(0)->DebugString();
答案 0 :(得分:6)
nextMsg
是while循环中的局部变量,当它离开循环时它将被销毁,然后保存在allMessages
中的地址变得悬空。任何取消引用都只是UB。
如果你想在循环之外使用指针,你需要在循环中new
它们(最后delete
),或者使用smart pointers来避免手动记忆管理。