gpt4 book ai didi

c++ - Boost 序列化 text_iarchive 进程终止

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:39 25 4
gpt4 key购买 nike

我正在使用 boost::archive 来序列化我的对象。我的代码在这里:

void Tracking::SaveMap() {
ofstream ofs("/home/yisha/Workspace/Map/map.txt");
boost::archive::text_oarchive oa(ofs);
oa << *mpMap;
}

bool Tracking::LoadMap() {
cout << "\nLoading map..." << endl;

Map* tmpMap;
ifstream ifs("/home/yisha/Workspace/Map/map.txt");
if(!ifs.good()) {
printf("ifs not good\n");
return false;
}

printf("after ifstream\n");
boost::archive::text_iarchive ia(ifs);
printf("after archive\n");
ia >> *tmpMap;
printf("after ia\n");

mpMap = tmpMap;

cout << "Loading map finished!" << endl;

return true;
}

mpMap是一个实现了序列化功能的对象。
map 已成功保存,但我无法验证 map.txt 是否正确,因为我无法加载 map 。
我在 ros 中运行,运行时错误只是进程死亡。我在这里得到了输出:

Loading map...
after ifstream
after archive
[mono-1] process has died [pid 19721, exit code -11, cmd /home/yisha/Workspace/VO/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Mono __name:=mono __log:=/home/yisha/.ros/log/811c9cf6-68a6-11e6-9123-408d5cb4a2ef/mono-1.log].
log file: /home/yisha/.ros/log/811c9cf6-68a6-11e6-9123-408d5cb4a2ef/mono-1*.log
all processes on machine have died, roslaunch will exit

它说的目录中没有日志文件。

最佳答案

我不确定您是如何创建 mpMap 的,但它看起来像是在堆上。在这种情况下,您有两种选择。您可以通过取消引用指针来序列化对象本身,就像您正在做的那样。问题是,当您加载回数据时,您需要一个对象来读入

Map* tmpMap = new Map;
ia >> BOOST_SERIALIZATION_NVP(*tmpMap);

确保正确删除tmpMap

您还可以序列化指针本身,boost 将负责内存管理:

// saving, note that there's no dereferencing
oa << BOOST_SERIALIZATION_NVP(mpMap);

// loading, still no dereferencing
Map* tmpMap;
ia >> BOOST_SERIALIZATION_NVP(tmpMap);

你不能做的是保存一个对象(*mpMap)并希望将它读入一个不指向任何东西的指针(tmpMap)。

关于c++ - Boost 序列化 text_iarchive 进程终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39105215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com