2

Windows で正しく動作するライブラリを Linux に移植しようとしています。

これらのコード行で、エラーが発生します。

long* permutation = new long[result->getGeneListCount()];
for(long i=0; i<result->getGeneListCount(); i++) 
        permutation[i]=i;
Util::ArrayUtil::DurstenfeldArrayPermutation<long>(permutation, result->getGeneListCount()); 

//result->PerformGenePermutation(permutation);
std::cout << "Just skipped the permutation" << std::endl;

delete[] permutation;

私には、削除中にエラーが発生したようです。にコメントしたのでPerformGenePermutation()、他の行にもコメントするだけでよいことはわかっていますが、他のコードでも同様の問題が発生する可能性があるため、エラーを理解したいと思います。

私が得るエラー出力は次のとおりです。

*** glibc detected *** /usr/lib/jvm/java-7-oracle/bin/java: munmap_chunk(): invalid pointer: 0x09f287f8 ***

誰でも私を助けてもらえますか?

詳細が必要な場合はお尋ねください。

4

1 に答える 1

2

与えられたコードと情報は問題の原因を突き止めるのに十分ではありませんが、次のことを行うことができます:

コードを置き換える

long* permutation = new long[result->getGeneListCount()];
for(long i=0; i<result->getGeneListCount(); i++) 
        permutation[i]=i;
Util::ArrayUtil::DurstenfeldArrayPermutation<long>(permutation, result->getGeneListCount()); 

//result->PerformGenePermutation(permutation);
std::cout << "Just skipped the permutation" << std::endl;

delete[] permutation;

std::vector<long> permutation( result->getGeneListCount() );
for(long i=0; i<long(permutation.size()); i++) 
        permutation[i]=i;
Util::ArrayUtil::DurstenfeldArrayPermutation<long>(&permutation.at( 0 ), permutation.size()); 

//result->PerformGenePermutation(permutation);
std::cout << "Just skipped the permutation" << std::endl;

//delete[] permutation;

は自動的にdelete削除されるため、 が削除されることに注意してください。std::vector

これで からの範囲エラーからの例外がスローされた場合std::vector::at、サイズがおそらくゼロであることがわかります。とにかく、デバッガーで非常に簡単に確認できるようになりました。さらに重要なことに、例外がスローされない場合は、このコードですべてがうまくいっていることがわかります (std::vector信頼できるため)。したがって、問題は別の場所にあります。

残念ながら、これはコメントとして投稿するには長すぎましたが、実際には答えではありません。これはSOの問題です。純粋な回答用に設計されているため、一般的なヘルプはサポートされていません。

于 2012-12-26T23:24:42.817 に答える