现在,我有一个protobuf消息的QList
。在while循环内,我创建消息并将其添加到QList
中。我尝试使用DebugString
方法将它们打印出来,在while循环中它可以正常工作且没有错误。当我尝试在while循环之外调用完全相同的->DebugString()
方法时,我得到:
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();
最佳答案
nextMsg
是while循环内的局部变量,退出循环时将被销毁,然后保存在allMessages
中的地址将变为悬挂状态。对它的任何取消引用都只是UB。
如果要在循环外部使用指针,则需要在循环内部对其进行new
(最后对它们进行delete
),或使用smart pointers避免手动进行内存管理。