【发布时间】:2012-12-26 23:09:31
【问题描述】:
我正在尝试将在 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 ***
有人可以帮帮我吗?
如果您需要更多详细信息,请询问我。
【问题讨论】:
-
有没有可能
result->getGeneListCount()retuns0? -
permutation指针不会改变对DurstenfeldArrayPermutation的调用吗?您能否通过在调用前后打印指针值 (printf("%p\n", permutation);) 来验证这一点?DurstenfeldArrayPermutation会自行释放指针吗? -
DurstenfeldArrayPermutation是否通过引用获取其第一个参数?如果是这样,它可能会尝试重新分配它,这在某些平台上可能很好(malloc和new[]用户使用相同的底层分配器)但在其他平台上则不然。 -
@ahenderson:我试过了,它不返回 0!
-
@ulidtko :我检查了,但排列的值在函数之后没有改变。