В моем тесте, впервые через этот код (когда index=0
) мы находим, что t->Array[0]
содержит несколько огромных чисел. Таким образом, index
отправляется во что-то огромное, и в следующий раз через цикл оно превышает размер t->Array
, и вы вылетаете.
Содержимое t->Array
изначально загружается из файла DL.1
в функции LoadTree
:
t->Next[0] = fread(t->Array,sizeof(DLENTRY),
t->CurrentLength,fp);
Так что, к сожалению, авторы решили хранить эти данные в собственном двоичном формате своего компьютера, что может не совпадать с вашим текущим компьютером.
Теперь DLENTRY
является typedef для int[3]
. Быстрый взгляд на DL.1
показывает, что это 32-разрядные целые числа с прямым порядком байтов. Если вы используете это на x86, то ваш int
имеет 32-битный порядок байтов. Таким образом, вам нужно будет поменять байты этих данных после прочтения (например, зациклив их на ntohl()
.)
Если это указывает на переносимость остальной части кода, то я думаю, что перенос его на ваш текущий компьютер может быть существенным проектом.