【发布时间】:2019-07-15 15:10:04
【问题描述】:
我是使用 google protobuffers 的新手,我创建了一条基本消息:
message msg {
uint32 id = 1;
google.protobuf.Timestamp timestamp = 2;
}
现在我创建了一个小型 c++ 程序来使用它[带有必要的标头]
int main(void) {
auto m = msg{};
m.set_id(2);
auto timestamp = google::protobuf::Timestamp{};
timestamp.set_seconds(time(NULL));
timestamp.set_nanos(0);
m.set_allocated_timestamp(×tamp);
std::cout << m.id() << std::endl;
std::cout << m.timestamp().seconds() << std::endl;
return 0;
}
但是,这个程序给出了一个段错误。
free(): invalid pointer
[1] 9537 abort (core dumped)
我需要在哪里释放内存?
【问题讨论】:
-
Offtopic:
timestamp.set_seconds(time(NULL));也是未定义的行为。没有崩溃的风险,只是你没有time返回秒数的保证。 -
timestamp.set_seconds(time(NULL));来自官方协议缓冲区网站developers.google.com/protocol-buffers/docs/reference/…,但显然我愿意接受更好的建议。
-
@MarekR 出于所有意图和目的,您确实有此保证。
标签: c++ protocol-buffers protobuf-c