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 回答