Я получаю эту ошибку с Spin 6.4.8
:
spin: indexing channels[-1] - size is 3
spin: 2.pml:13, Error: indexing array 'channels'
при запуске имитации следующей модели Promela:
chan channels[3] = [1] of { pid };
active [3] proctype node () {
short pred = (_pid - 1) % 3;
short succ = (_pid + 1) % 3;
printf("Values(%d): %d, %d\n", _pid, pred, succ);
if
:: pred == -1 -> pred = 2;
:: else -> skip;
fi;
printf("Corrected Values(%d): %d, %d\n", _pid, pred, succ);
{
chan pc = channels[pred];
chan sc = channels[succ];
}
}
Как видно из следующей трассировки вывода, я не обращаюсь к проблемному местоположению массива -1
, как указано в сообщении об ошибке:
Values(0): -1, 1
Values(2): 1, 0
Values(1): 0, 2
Corrected Values(1): 0, 2
Corrected Values(2): 1, 0
Corrected Values(0): 2, 1
После дальнейшего анализа, который здесь не показан, оказалось, что pc
и sc
всегда инициализируются правильным значением канала, когда я пытаюсь получить к ним доступ.
Вопрос. Почему я получаю сообщение об ошибке и как это исправить?