Как я могу инициализировать ценности?Массив структур? - PullRequest
0 голосов
/ 23 апреля 2019

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

struct TLBentry{
  unsigned int physicalAddress;
  unsigned int virtualAddress;
};

struct pageTableEntry{
  char validFlag;
  char dirty;
  unsigned int physicalAddress;
};
  memSys->virtMem = malloc( sizeof( int ) * sizeVM * pageSize );
  memSys->tlb = malloc( sizeof(struct TLBentry) * sizeTLB );
  memSys->pgTable = malloc( sizeof(struct pageTableEntry) * sizeVM );

  for( int i=0; i < memSys->sizeTLB; i++ ){
    struct TLBentry* entry = &(memSys->tlb[i]);
    entry->virtualAddress = i;
    entry->physicalAddress = i;
  }
  for( int i=0; i < memSys->sizeVM; i++ ){
    memSys->pgTable[i].physicalAddress = i;
    memSys->pgTable[i].validFlag = 0;
  }
  for( int i=0; i < memSys->sizePM; i++ ){
    memSys->pgTable[i].physicalAddress = i;
    memSys->pgTable[i].validFlag = 1;
  }
  printf("initialize %d\n", memSys->tlb[1].virtualAddress );

Оператор print должен быть "initialize 1", но он печатает "initialize 0"

Я не знаю, что происходит.

1 Ответ

0 голосов
/ 23 апреля 2019

Знаете ли вы разницу между оператором = и == в C? Вы не приписываете значение i для своего физического адреса, в этой строке вы ничего не делаете.

entry->physicalAddress == i;
entry->virtualAddress == i;

И в этой строке, почему вы печатаете tlb [1]? Знаете ли вы, что массив начинается с 0 в C?

printf("initialize %d\n", memSys->tlb[1].virtualAddress );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...