4.4.Моя программа нормально падает, но не под Valgrind, или наоборот.Что происходит?
Когда программа работает под Valgrind, ее среда немного отличается от того, когда она запускается изначально.Например, структура памяти отличается, и способ, которым запланированы потоки, отличается.
В большинстве случаев это не имеет никакого значения, но может, особенно если ваша программа содержит ошибки.Например, если ваша программа дает сбой из-за того, что она ошибочно обращается к памяти, которая не имеет адреса, возможно, что эта память не будет недоступна при запуске под Valgrind.Кроме того, если ваша программа использует гонки данных, они могут не проявляться в Valgrind.
Вы ничего не можете сделать, чтобы изменить это, просто характер работы Valgrind заключается в том, что он не может точно реплицировать нативныйсреда исполнения.В случае, если ваша программа вылетает из-за ошибки памяти при ее запуске, а не при работе под Valgrind, в большинстве случаев Memcheck должен идентифицировать неверную операцию памяти.
Таким образом, вы ничего не можете с этим поделать,На самом деле вам не нужно беспокоиться о том, что ваша программа не работает под Valgrind.Вы должны прочитать сообщения об ошибках и исправить их.Начните с Неверное чтение / Неверные ошибки записи .Они почти всегда указывают на ошибку в коде.В этом конкретном случае вы также можете запустить свой код в бесконечном цикле из простого bash-скрипта, пока он не выдаст сообщение об ошибке.Скорее всего, вы работаете с недопустимыми итераторами, и это Неопределенное поведение в C ++.