c++ - C++ 代码在一台机器上运行,但在另一台机器上出现 seg 错误
问题描述
我有一个程序可以读取 OCT 图像并将其转换为点云。我将该程序编译为可执行文件以将其复制到另一台机器上。我尝试运行该机器的可执行文件并获得 Seg Fault 代码:
Thread 1 "OpenCLBA-Prod" received signal SIGSEGV, Segmentation fault.
0x0000000000423ca1 in generatePointCloudFromModel(boost::shared_ptr<pcl::PointCloud<pcl::PointXYZ> >&, boost::shared_ptr<pcl::PointCloud<pcl::PointXYZ> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) ()
这是我尝试运行时的消息gdb list
:
../sysdeps/x86_64/dl-procinfo.c: No such file or directory.
我用过backtrace
,where
和list
of gdb
,但这是我能找到的所有信息。
这里的罪魁祸首可能是什么?我查看了stackoverflow,它说它可能是undefined behavior
,但是这种方法经常在我的uni中的不同机器上使用(我没有修改它)。
解决方案
这里的罪魁祸首可能是什么
这很常见:您的程序具有未定义的行为(例如堆损坏或数据竞争),并且在一台机器上“运行良好”而在另一台机器上崩溃。
你的第一步应该是在Valgrind下运行程序并修复它发现的任何错误。
您的第二步应该是使用 Address、Memory 和 Thread Sanitizers来检测您的程序。
这种方法经常在我大学的不同机器上使用(我没有修改它)。
问题很可能出在您自己的代码中,而不是发生崩溃的方法中。
推荐阅读
- google-sheets - 如何根据特定标准反映多个单元格
- c - 延迟初始化具有多线程读取器的数组:没有障碍或原子是否安全?
- python - 如何根据对话框中的事件在主窗口中填充列表
- android - 请求位置更新从未调用 onLocationResult
- python - Keras 自定义层(将另一个自定义层作为超类)不接受多个输入
- c - 如何将此功能代码减少到最多 25 行?
- c# - LogManager.GetLogger("Name") 和 LogManager.GetCurrentClassLogger() 有什么区别?
- git - 哈士奇的工作原理是什么?
- tsql - 如果多列中的链接数据可用,如何获取每个组的最小 ID
- sql-server - Access 2010 的 SQL Server 驱动程序更新