2016-10-04 44 views
1

上我只有用特拉维斯 - CI服务器我的测试过程中抛出这个奇怪“的std :: bad_alloc的”。我在几台机器上测试了我的代码,使用了相同的编译器选项,并且我不调用任何外部库(仅标准C++ 11)。“的std :: bad_alloc的”远程服务器只(特拉维斯-CI)

./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,所以我的问题可能还是不无关系吧,但我不知道这么远。然而,这似乎并没有被涉及到的一些语法问题(因为我的代码是建立和执行)

没有人有可能是什么坏ALLOC的原因在相似背景的想法?有没有比使用valgrind和travis-ci更快的方法?

+1

您可能正在尝试使用比travis-ci更多的内存。 – Holt

+0

对于CI服务器和测试目的,只使用daat的一小部分是个好主意。特别是如果数据很大并导致分配大量内存。 –

回答

1

的std :: bad_alloc的意思是你要求的分配上堆数据,但没有足够的内存。这可以直接请求new或间接,如创建一个非常大的std :: vector。请注意,std :: bad_alloc很少遇到几个原因。首先,默认情况下,linux总是成功分配内存,因为当你尝试访问它时会产生真正的分配(在这种情况下程序以OOM终止)。第二个原因是,今天我们通常有足够的内存。

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

+0

谢谢。我将无法在一周之前进行测试,但我会尽快尝试一下。 – azzaare