我正在尝试将一个在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 ***
有人可以帮助我吗?
请问我是否需要进一步的细节。
答案 0 :(得分:2)
给定的代码&amp; info不足以确定问题的原因,但您可以执行以下操作:
替换代码
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的问题。由于它是为纯粹答案而设计的,因此它不支持一般的帮助。