2016-10-04 49 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