У меня есть эта структура:
typedef struct {
void (*func)(instruction);
union {
double db;
char ch;
};
} instruction;
В моем исходном файле у меня есть массив этих инструкций. Мой вопрос в том, как мне пройтись по этому массиву и выполнить каждую функцию структуры?
Я думал, что знаю, как это сделать, но тот факт, что функция инструкции имеет параметр, который является инструкцией, кажется, вызывает проблемы. Таким образом, это не работает:
int i;
for (i = 0; i <= instr_count; i++) {
(*instr[i].func) (instr[i]);
}
instr — массив инструкций.
Вот функция, которая заполняет массив. Сам массив объявляется в начале файла.
void read_instructions()
{
char* str;
char *instruct;
int n;
char c;
instruction next = {0};
while (!feof(datafile)) {
// Fetch the next string
// if (push or pop), get the next argument
// create instructiwn and add to instruction array
str = get_next_string();
instruct = strtok (str, " ");
if (strncmp (instruct, "P", 1) == 0) {
char *arg = strtok (NULL, " ");
if (strncmp (str, "PUSH", 4) == 0) {
next.func = pushFunc;
}
else {
next.func = popFunc;
}
n = arg[0];
if (n > 64 || n < 71)
next.ch = n;
else {
double n;
scanf ("%lf", arg, n);
next.db = n;
}
instr[instr_count] = next;
instr_count++;
}
else {
c = instruct[0];
switch (c) {
case 'A' :
next.func = addFunc;
break;
case 'S' :
next.func = subFunc;
break;
case 'M' :
next.func = multFunc;
break;
case 'D' :
next.func = divFunc;
break;
default :
break;
}
instr[instr_count] = next;
instr_count++;
}
}
fclose (datafile);
}
В качестве краткого пояснения, этот код берет файл «промежуточного кода», определяет инструкцию и создает структуру инструкции для каждой из них, которая содержит соответствующий указатель на функцию.
Запуск кода дает мне эту ошибку времени выполнения:
«Необработанное исключение по адресу 0x00000000 в Interpreter.exe: 0xC0000005: нарушение прав доступа». (Составлено с использованием VS 2010).