Я пытаюсь портировать библиотеку, которая правильно работает в 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 ***
Кто-нибудь может мне помочь?
Пожалуйста, спросите меня, если вам нужна дополнительная информация.
Данный код & Информация недостаточна для определения причины проблемы, но вы можете сделать следующее:
заменить код
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. Поскольку он предназначен для чистых ответов, он не поддерживает общие Помогите.
Других решений пока нет …