У меня есть некоторый код C ++ (с использованием библиотек ROOT ), который я унаследовал (~ 1,5 тыс. Строк), и одна из первых вещей, которые я пытаюсь сделать, - это устранить ошибку, связанную с открытиеми чтение двоичного файла, который передается в качестве аргумента во время выполнения.Некоторый код, представляющий проблему, будет выглядеть так:
[~/this]$ ./Make_RWQ_Tree /Users/me/this/that/mydata_f00000001.rwq
inFile: ./mydata_f00000001.rwq
outFile: ./mydata_f00000001.tru
Header Info:
a = 12
b = 345
c = 51
N = 100
G = 100
numEventsInFile = 1000
r = 1
s = 2
t = 4
*** Show info for each of the events in the file normally ***
[~/this]$
[~/this]$ mv ./mydata_f00000001.rwq /Users/me/this/that/another/directory/deeper/
[~/this]$ ./Make_RWQ_Tree /Users/me/this/that/another/directory/deeper/mydata_f00000001.rwq
inFile: ./mydata_f00000001.rwq
outFile: ./mydata_f00000001.tru
Header Info:
a = 12
b = 345
c = 51
N = 100
G = 100
numEventsInFile = 1000
*** Break *** segmentation violation
===========================================================
There was a crash.
This is the entire stack trace of all threads:
===========================================================
#5 0x00007fffffe007c5 in __memcpy ()
#6 0x00007fff87de59f7 in std::basic_streambuf<char, std::char_traits<char> >::xsgetn ()
#7 0x00007fff87dc7b19 in std::basic_filebuf<char, std::char_traits<char> >::xsgetn ()
#8 0x00007fff87dcd8c1 in std::istream::read ()
#9 0x0000000100001e25 in main (argc=<value temporarily unavailable, due to optimizations>, argv=<value temporarily unavailable, due to optimizations>) at Make_RWQ_Tree.cxx:175
Таким образом, в зависимости от того, где находится файл, я получаю ошибку сегмента после , когда он успешно открывается и считывает несколько значений из файла,Строка 175, как сообщается, является просто обычным inFile.read.
Я прошу прощения, что это может быть очень трудно помочь без реальных строк кода, но я не думаю, что могу свести код к небольшой рабочей версииэто иллюстрирует это.У кого-нибудь есть опыт такого рода вещей?