现在,我有一个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避免手动进行内存管理。

07-24 21:00