将代码从Windows移植到Linux时删除阵列时出错

时间:2012-12-26 23:09:31

标签: c++ linux porting

我正在尝试将一个在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 ***

有人可以帮助我吗?

请问我是否需要进一步的细节。

1 个答案:

答案 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的问题。由于它是为纯粹答案而设计的,因此它不支持一般的帮助