Почему при обращении к целочисленному массиву сразу возникает ошибка segfault? - PullRequest
0 голосов
/ 01 февраля 2020

Я отправляю инициализировать массив кода размером 500, прежде чем заполнить его целыми числами и отправить в эту функцию, чтобы заполнить структуру значениями массива. Но при попытке доступа к коду [0] происходит сбой машины.

instruction *fetchCycle(int *code, instruction *ir, int pc)
{
  int index = pc * 4;
  printf("accessing code[%d]\n", index);
  ir->op = code[index++];
  printf("accessing code[%d]\n", index);
  ir->r = code[index++];
  printf("accessing code[%d]\n", index);
  ir->l = code[index++];
  printf("accessing code[%d]\n", index);
  ir->m = code[index++];
  printf("accessing code[%d]\n", index);
  return ir;
}

Это функция, которая вызывает fetchCycle ()

// takes in a single instruction and executes the command of that instruction
void executionCycle(int *code)
{
  int l, m, sp = MAX_DATA_STACK_HEIGHT, bp = 0, pc = 0, gp = -1, halt = 0, i = 0;
  int data_stack[41] = {0}, reg[200];
  instruction *ir;

  // Capturing instruction integers indicated by program counter
  ir = fetchCycle(code, ir, pc++);
  // printf("5\n");
  while (halt == 0)
  {
    // printf("6\n");
    switch(ir->op)
    { ...

И это вывод на терминал:

код доступа [0] Ошибка сегментации (ядро сброшено)

1 Ответ

4 голосов
/ 01 февраля 2020

Фрагмент кода:

instruction *ir;

// Capturing instruction integers indicated by program counter
ir = fetchCycle(code, ir, pc++);

Проблематично c, то, что вы передаете в функцию - это унифицированный указатель ir, поэтому, когда функция пытается получить доступ к своим членам, она не может, потому что их там нет.

Что касается code Я не могу сказать, так как это параметр функции executionCycle, я не знаю, куда он указывает. Вам, вероятно, следует включить в вопрос и вызывающую функцию.

...