Я использую библиотеку, которая, кажется, читает из сжатого файла построчно через буфер. Кажется, что происходит сбой в BZ2_bzRead в GDB, но не в Valgrind, когда у меня есть 3 экземпляра таких объектов чтения, читающих разные файлы. Я проверил этот буфер, указатель файла действителен в точке вызова функции в GDB.
Чтобы воспроизвести ошибку, я должен создать несколько фиктивных объектов, используя new в моем коде, и после определенных фиксированных элементов это, похоже, не работает. Если я не делаю этого, то, кажется, работает отлично.
Сначала я подумал, что я каким-то образом испортил кучу, но, похоже, valgrind не улавливает ничего подобного в memcheck. это только сообщает о некоторых неинициализированных вызовах на fabs и lround (кажется, что нет такого параметра, насколько я мог бы сказать).
Есть ли способ предотвратить segfault в ferror и перехватить его заранее, используя try catch или valgrind или gdb или какой-то другой механизм, чтобы увидеть нарушения памяти?
Задача ещё не решена.
Других решений пока нет …