Im пытается сделать тайник с C, но у меня проблема с выделением памяти на последнем массиве структурыпамяти с массивом структуры с массивом структуры
struct block{
int validBit;
char *tag;
}
typedef struct block block_t;
Struct set{
block_t *blocks;
}
typedef struct set set_t;
Struct cache{
//Some other variables but not important for this question
set_t *set;
}
typedef struct cache cache_t;
Так я выделяю памяти для кэша, как это в функции setupCache()
cache_t *cache = NULL;
cache = malloc(sizeof(cache));
if(cache == NULL){
fprintf(stdout, "Could not allocate memory for cache!");
}
Это прекрасно работает, теперь я выделяю память массива множества STRUCT с 16 элементами
cache->set = malloc(16 * sizeof(cache->set));
//same error check as above here, just left our for precision of question
Это также работает, теперь я выделить память для массива блоков в наборе
for(i = 0; i < 16; i++){
cache->set->blocks = malloc(2 * sizeof(cache->set->blocks));
Опять это работает, но вот беда приходит
cache->set->blocks[i] = malloc(sizeof(block_t));
Это дает мне ошибку: несовместимые типы при присвоение типа 'block_t' из типа 'void *'
Не совсем уверен, что я делаю неправильно, возможно, что-то глупое.
Это как должно быть: Кэш содержит массив множества struct с 16 элементами, каждый из этих элементов набора должен иметь массив блочной структуры с 2 элементами.
Надеюсь, что кто-то из вас может мне помочь!
Привет! Большое спасибо за Ваш ответ! Я немного смущен. Не могли бы вы объяснить, почему я должен предоставить размер * кешем вместо кеша? Кроме того, cache-> set-> blocks должен быть массивом из двух элементов struct block_t. Не следует ли выделять память? – nichos