纯虚方法称为错误Google协议缓冲区

时间:2016-06-28 14:00:36

标签: c++ qt pointers runtime-error protocol-buffers

现在我有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();

1 个答案:

答案 0 :(得分:6)

nextMsg是while循环中的局部变量,当它离开循环时它将被销毁,然后保存在allMessages中的地址变得悬空。任何取消引用都只是UB。

如果你想在循环之外使用指针,你需要在循环中new它们(最后delete),或者使用smart pointers来避免手动记忆管理。