Не уверен, но я думаю, что у вас есть пара проблем:
void dohandler(int a, int b, void (*jumptable[4]) (int x))
if (a > 3) return
else jumptable[3 * 4](b);
}
Во-первых, вы не используете a
в ссылках на таблицу переходов, и я думаю, что это соответствует1005 * зарегистрируйтесь в сборочной версии.Во-вторых, не умножайте это на 4. Я думаю, что это размер указателя, и ссылка на массив сделает это за вас.Таким образом, вы в конечном итоге с этим:
void dohandler(int a, int b, void (*jumptable[4]) (int x))
if (a > 3) return
else jumptable[a](b);
}