Я запускаю Segfault при использовании буферов протокола с подчиненными сообщениями. Я не могу опубликовать весь свой код, поэтому я пытаюсь привести пример.Настройка прошивки Protobuf или встроенного сообщения и возврат объекта сообщения
Код .proto что-то вроде этого:
Message {
optional int id = 1;
optional SubMessage submsg = 2;
}
SubMessage {
optional int foo = 1;
}
В C++ код У меня есть функция, которая создает и возвращает SubMessage к другой функции, которая встраивает в SubMessage в сообщение и возвращает один к Иная функция ...
SubMessage createSubMessage() {
SubMessage smsg;
smsg.set_foo(12);
return smsg;
}
Message createMessage() {
Message msg;
// with this line i get the segfault, without not
SubMessage* smsg = msg.mutable_submsg();
// I get the segfault no matter if i actually
// set the submessage or not.
// smsg.CopyFrom(createSubMessage();
return msg;
}
void foo() {
for(;;) {
Message msg;
msg = createMessage();
}
}
И ошибка я получаю исходит от SubMessage :: MergeFrom()
[libprotobuf FATAL messges_pb.cc:1128] CHECK failed: (&from) != (this):
Segmentation fault
Segfault интересно появляется на второй итерации цикла, при втором присвоении msg.
Я уже пробовал много путаницы, выделяя SubMessage в куче и устанавливая его с помощью set_allocated_submsg(), CopyFrom(), MergeFrom(), конструкторов копирования и т. Д. ... Я все еще сталкиваюсь с тем же проблема.
Я не думаю, что ваш пример кода на самом деле демонстрирует проблему - я не вижу причин, по которым она должна приводить указанную вами ошибку. Я подозреваю, что реальная проблема существует только в вашем реальном коде, а не в примере. Не могли бы вы попытаться создать полную, самодостаточную примерную программу, которую мы можем скомпилировать (например, включая функцию 'main()'), которая показывает проблему? –