I am not sure why this does not work. I am a bit confused about the typedef's
typedef struct cache_line {
    int valid;
    int tag;
    int usage;
} cache_line_t;
typedef cache_line_t* cache_set_t;
typedef cache_set_t* cache_t;
void init() {
  S = 2 << (s-1);
  B = 2 << (b-1);
  cache = malloc(sizeof(cache_set_t*) * S);
  for(int i = 0; i < S; i++) {
    cache[i] = malloc(sizeof(cache_line_t*) * E);
    for(int j = 0; j < E; j++) {
      cache[i][j]->valid = 0;
      cache[i][j]->tag = 0;
      cache[i][j]->usage = 0;
    }
  }
}
Compiling gives an error with the ->'s
s, b, S, B, and E are ints. cache is defined above as a cache_t. I am trying to make an array of S sets which are arrays of E lines.
Any help is greatly appreciated
 
    