Ошибка удаления массива при переносе кода из Windows в Linux

Я пытаюсь портировать библиотеку, которая правильно работает в 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 ***

Кто-нибудь может мне помочь?

Пожалуйста, спросите меня, если вам нужна дополнительная информация.

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. Поскольку он предназначен для чистых ответов, он не поддерживает общие Помогите.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]