Valgrind memcheck использует кучу эвристик, чтобы избежать ложных срабатываний, при использовании «безвредных» неинициализированных значений, поскольку такие применения распространены как в корректном, так и в некорректном, но иным образом работающем коде.
В частности, оно не преграждается, пока вы на самом деле не используете такое значение серьезным, возможно, «необратимым» образом, например, прыгаете в зависимости от его значения.
Это означает, что иногда ошибка возникает очень далеко от источника проблемы, и даже невозможно определить, какое значение имеет место. Есть ли какой-нибудь способ «проверить» значение во время выполнения, например use(x)
, который заставит Valgrind выдать ошибку в этом месте, если x
неинициализирован?