'的std :: bad_alloc的'仅在远程服务器上(travis-ci)

时间:2016-10-04 06:17:07

标签: c++ travis-ci bad-alloc

我有这个奇怪的&#st; :: bad_alloc'仅在我使用travis-ci服务器测试期间抛出。我在几台机器上测试了我的代码,使用相同的编译器选项,而且我没有调用任何外部库(只有标准的c ++ 11)。

./convexhull ../examples/convexhull/instances/size100space10.csv 1
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
/home/travis/build.sh: line 45:  3957 Aborted                 (core dumped) ./convexhull ../examples/convexhull/instances/size100space10.csv 1

我是travis-ci的新手,所以我的问题可能与此无关,但我到目前为止还没有任何线索。但是,它似乎与某些语法问题无关(因为我的代码是构建和执行的)

有没有人知道在类似情况下可能导致坏分配的原因是什么?有没有比使用带有travis-ci的valgrind更快的方法?

1 个答案:

答案 0 :(得分:1)

std :: bad_alloc表示您请求在堆上分配数据但内存不足。这可以是new的直接请求或间接请求,比如创建一个非常大的std :: vector。注意,由于多种原因很少遇到std :: bad_alloc。首先,默认情况下,linux总是成功分配内存,因为当您尝试访问它时会进行实际分配(在这种情况下,程序会以OOM终止)。第二个原因是今天我们通常有足够的RAM。

CI服务器是一种特殊情况。他们必须提供运行不可靠和不可信代码的可靠基础架构。所以他们必须限制进程,防止他们吃太多资源。这特别意味着RAM的使用也受到限制,并且限制不是很高。因此,您必须在测试中使用更少的RAM。可能你应该减少测试数据的大小。