首页 > 解决方案 > 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,wherelistof gdb,但这是我能找到的所有信息。

这里的罪魁祸首可能是什么?我查看了stackoverflow,它说它可能是undefined behavior,但是这种方法经常在我的uni中的不同机器上使用(我没有修改它)。

标签: c++gdb

解决方案


这里的罪魁祸首可能是什么

这很常见:您的程序具有未定义的行为(例如堆损坏或数据竞争),并且在一台机器上“运行良好”而在另一台机器上崩溃。

你的第一步应该是在Valgrind下运行程序并修复它发现的任何错误。

您的第二步应该是使用 Address、Memory 和 Thread Sanitizers来检测您的程序。

这种方法经常在我大学的不同机器上使用(我没有修改它)。

问题很可能出在您自己的代码中,而不是发生崩溃的方法中。


推荐阅读