2016-10-04 14 views
1

私はtravis-ciサーバを使ってテストしている間だけ、この不思議な 'std :: bad_alloc'を投げます。私はいくつかのマシンで、同じコンパイラオプションを使って自分のコードをテストしましたが、私は外部ライブラリ(標準のC++ 11のみ)を呼び出しません。私の質問は、それとは無関係であるか、ないかもしれないので、'std :: bad_alloc'(リモートサーバのみ)(travis-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 

私は、-CIをトラヴィスに新しいですが、私は今のところ見当もつかない。しかし、それはいくつかの構文上の問題(私のコードはビルドされ実行されているので)とは関係していないようです。類似のコンテキストでbad-allocの原因が何であるか考えている人はいますか? travis-ciでvalgrindを使うよりも早い方法がありますか?

+1

おそらく、travis-ciで許可されているメモリよりも多くのメモリを使用しようとしています。 – Holt

+0

CIサーバーとテスト目的のために、daatの小さなサブセットのみを使用することは常に良い考えです。特に、データが大きく、多くのメモリが割り当てられる場合。 –

答えて

1

std :: bad_allocは、ヒープ上のデータの割り当てを要求したが、十分なメモリがないことを意味します。これは、newの直接リクエスト、または非常に大きなstd :: vectorの作成のような間接的なものです。 std :: bad_allocはいくつかの理由でめったに発生しないことに注意してください。まず第一に、linuxは実際に割り当てようとすると実際に割り当てが行われるので、linuxは常にメモリを割り当てます(このような場合にはプログラムはOOMで終了します)。もう一つの理由は、今日は通常十分なRAMがあるということです。

CIサーバーは特別なケースです。信頼できないコードと信頼できないコードを実行する信頼性の高いインフラストラクチャを提供する必要があります。だから彼らはプロセスを制限しすぎて食べ過ぎるのを防ぐ必要があります。これは、特にRAMの使用が制限されており、制限がそれほど高くないことを意味します。したがって、テストでRAMを少なくしなければなりません。テストデータのサイズを小さくする必要があります。

+0

ありがとうございます。私は1週間前にテストすることはできませんが、できるだけ早く最低限の例文で試してみます。 – azzaare

関連する問題