Я работаю над внедрением алгоритма разделения и покоя, который находит две точки, наиболее близкие друг другу, и расстояние между ними. Мое окончательное решение находит правильный ответ (по сравнению с использованием грубой силы), но около 1/3 времени вернет ошибку ошибки сегментации. Я работаю над исправлением этой проблемы на пару дней, добавляя здесь заявления о печати, но не смог найти проблему. Я был бы признателен, если бы кто-то взглянул на мой код.Рекурсивная функция иногда возвращает ошибку сегментации
ответ
Ваш цикл «разделить» предполагает, что X
и Y
имеют одинаковое количество элементов. Если Y
имеет меньше X
, вы столкнетесь с неопределенным поведением, которое может быть забавным результатом или сбоем.
. Возможно, это решение? всего несколько строк, которые нужно заменить, их замеченная замена (почему необходимо) –
Это имеет смысл. Я попытался разбить цикл на два: один для 'Y' с условием' i
Попробуйте изменить способ доступа для векторов. Векторный индекс-оператор, похоже, имеет своеобразное поведение в некоторых компиляторах/платформах (по крайней мере, с моей точки зрения). Я думаю, проблема связана с тем, что он является связанным списком, что приводит к несмежному в памяти, но это всего лишь предположение. (EDIT: станд :: вектор является смежным в памяти, проблема в том, что-то еще) Попробуйте использовать итераторы вместо (простого Peasy с auto
ключевым слова), такими как:
for (auto iter = Yprime.begin(); iter != Yprime.end(); iter++) {
// Your code here
}
Надеется, что это работает для вашего дела!
Только что отредактировал мое сообщение об этом, увидел ваш комментарий после. Извини за это. Хотя, я прямо сказал ** «но это просто догадка» **. Поэтому вы ошибаетесь, говоря, что я совершенно не прав. Просто попробуйте, на LLVM я получаю ошибку сегментации для использования оператора индекса. – Cedric
Спасибо за предложение. Мне потребовалось некоторое время, чтобы переопределить мой код таким образом. Тем не менее, я все еще получал ту же ошибку ... – Novice
Извините, что ... У меня была аналогичная проблема один раз, и она решила ее ... В противном случае, единственное, что я вижу, это то, что выражение 'abs (Y [i ] .x - mid.x)
- 1. Рекурсивная функция сегментации (core dumped)
- 2. Рекурсивная функция в PHP возвращает фатальную ошибку
- 3. Рекурсивная функция - возвращает 0?
- 4. C рекурсивная функция для ошибки сегментации продукта
- 5. рекурсивная функция не возвращает Правильно
- 6. Рекурсивная функция возвращает нан (C++)
- 7. Рекурсивная функция не возвращает массив
- 8. Рекурсивная функция всегда возвращает null
- 9. Рекурсивная функция возвращает неожиданный результат
- 10. Рекурсивная функция возвращает пустой массив
- 11. Рекурсивная функция, которая возвращает bool?
- 12. Рекурсивная функция члена группы возвращает ошибку «Объект удален»
- 13. Рекурсивная ошибка сегментации Floodfill
- 14. Как эта рекурсивная функция возвращает true?
- 15. Почему я иногда получаю ошибку сегментации?
- 16. Рекурсивная функция не возвращает созданную строку
- 17. Функция Возвращает #value Ошибка иногда
- 18. vZ solver возвращает ошибку сегментации
- 19. Почему он возвращает ошибку сегментации
- 20. функция печати (получить ошибку сегментации)
- 21. Функция «fread» вызывает ошибку сегментации
- 22. Функция класса класса C++ возвращает ошибку сегментации PyObject *
- 23. Статическая функция в PHP иногда возвращает ошибку (нелегальный тип смещения)?
- 24. Функция array_rand иногда возвращает пусто
- 25. C: Функция rand() изредка вызывает ошибку сегментации
- 26. bsearch() возвращает (nil), вызывает ошибку сегментации
- 27. C: ошибка сегментации иногда?
- 28. Почему моя рекурсивная функция возвращает None?
- 29. Рекурсивная функция PHP возвращает неожиданный массив
- 30. Рекурсивная функция javascript возвращает начальное значение
Где ваш отладчик поставил ошибку сегментации? – Cedric
Используя одни и те же данные ввода или разные данные каждый раз? У вас может быть нехватка стека, если функция рекурсивна. Попробуйте увеличить стек, повторно запустив данные, которые вызывают ошибку. – iksemyonov
@Cedric просто попробовал отладчик, и он говорит, что ошибка сегментации происходит на 'for (j = i + 1; j
Novice