0
我试着做用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!");
}
能正常工作,现在我分配结构组的阵列的存储器与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));
这给我一个错误:不兼容的类型时,从类型'void *'分配类型'block_t'
不确定我在做什么错,可能是愚蠢的。
这应该是这样的: 缓存包含一个包含16个元素的set结构数组,每个这些set元素都应该有一个包含2个元素的block结构数组。
希望你们任何人都能帮助我!
嗨!非常感谢您的回复! 虽然我有点困惑。 您能否解释为什么我应该使用*缓存而不是缓存来提供大小? 此外,cache-> set-> blocks应该是struct block_t的2个元素的数组。不应该分配内存吗? – nichos