写在前面
自己的测试环境:
Ubuntu20.04
一、问题描述
自己是使用C++编写的 ROS 程序,程序编译通过,但是运行时该 ROS 程序rosrun visual_estimation visual_estimation_node
时,出现如下报错:
Segmentation fault (core dumped)
(如果以roslaunch
的方式运行visual_estimation_node
节点,终端会直接报红并程序终止。)
二、解决方法
查了网上的一些资料,大部分都在说是 内存操作不当 导致的,但是自己debug 了,没发现数组越界等操作。通过重新debug,配合增加std::cout
打印,自己发现程序中有的函数需要有返回值,但是有可能会出现没有返回值的情况。
比如:
#include <iostream>
bool test(int a) {
if (a < 0)
{
std::cout << "Negative: a = " << a << std::endl;
return false;
}
a = a+1;
std::cout << "Positive: a = " << a << std::endl;
// return true;
}
int main(int argc, char **argv)
{
printf("---------- 0 ----------\r\n");
int a = 1;
test(a);
printf("---------- 1 ----------\r\n");
return 0;
}
如果使用类似于上面这种形式的程序,在 a >= 0
的情况下,由于没有返回值,可能会出现Segmentation fault (core dumped)
的报错。注意,上述这样的示例程序可能运行时不会报错,但是尤其是涉及到指针时,很有可能会出现报错Segmentation fault (core dumped)
。
因此,需要检查自己的程序,保证程序运行时的任一情况都要有return
与之对应,即需要将test(int a)
函数修改为下面这种形式:
bool test(int a) {
if (a < 0)
{
return false;
}
a = a+1;
printf("a = ", a)
return true;
}
参考链接
无