Первая ошибка в Valgrind:
/media/d2bfa67b-a3e7-4dde-9f3a-119260e3a29c/workspace/000-back-office/var/root_data/global_product_id/global_product_id_cut.root
==14840== Conditional jump or move depends on uninitialised value(s)
==14840== at 0x8B264E0: inflateReset2 (in /lib/x86_64-linux-gnu/libz.so.1.2.3.4)
==14840== by 0x8B265D8: inflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.3.4)
==14840== by 0x5627ABA: R__unzip (in /media/d2bfa67b-a3e7-4dde-9f3a-119260e3a29c /workspace/000-back-office/src/root/lib/libCore.so)
==14840== by 0x5E1B409: TKey::ReadObjWithBuffer(char*) (in /media/d2bfa67b-a3e7-4dde-9f3a-119260e3a29c/workspace/000-back-office/src/root/lib/libRIO.so)
==14840== by 0x5DFB673: TFile::GetStreamerInfoList() (in /media/d2bfa67b-a3e7-4dde-9f3a-119260e3a29c/workspace/000-back-office/src/root/lib/libRIO.so)
==14840== by 0x5DF9CC9: TFile::ReadStreamerInfo() (in /media/d2bfa67b-a3e7-4dde-9f3a-119260e3a29c/workspace/000-back-office/src/root/lib/libRIO.so)
==14840== by 0x5DFCE68: TFile::Init(bool) (in /media/d2bfa67b-a3e7-4dde-9f3a-119260e3a29c/workspace/000-back-office/src/root/lib/libRIO.so)
==14840== by 0x5DFDE12: TFile::TFile(char const*, char const*, char const*, int) (in /media/d2bfa67b-a3e7-4dde-9f3a-119260e3a29c/workspace/000-back-office/src/root/lib/libRIO.so)
==14840== by 0x43BBA6: ROOTproduct_id_record::loadROOT(bool) (ROOTproductidrecord.cpp:1078)
==14840== by 0x42E5CD: ROOTproduct_id::loadROOT() (ROOTproductid.cpp:142)
==14840== by 0x469D17: main (report_engine.cpp:528)
ROOTproductidrecord.cpp: 1077-1078
std::cout<<filename_char<<"\n";
TFile* my_rootfile_pointer = new TFile(filename_char); //open an existing file for reading (default).
Как вы можете видеть, имя_файла имеет значение … следующие функции (TFile :: TFile) взяты из стабильной библиотеки CERN.
Я не могу понять, что не так в ROOTproductidrecord.cpp: 1078 …
от http://zlib.net/zlib_faq.html#faq36 :
«Valgrind (или аналогичная программа проверки доступа к памяти) говорит, что deflate выполняет условный переход, который зависит от неинициализированного значения. Разве это не ошибка?
Нет. Это преднамеренно по соображениям производительности, и выход deflate не затронут. Это только начало появляться недавно, так как zlib 1.2.x по умолчанию использует malloc () для выделения, тогда как в более ранних версиях использовалась calloc (), которая обнуляет выделенную память. Хотя код был верным, версии 1.2.4 и более поздние были изменены, чтобы не стимулировать эти проверки. «
Других решений пока нет …