【发布时间】:2016-10-28 22:40:16
【问题描述】:
我正在尝试使用 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 个元素的集合结构数组,每个集合元素都应该有一个包含 2 个元素的块结构数组。
希望你们能帮助我!
【问题讨论】:
标签: c pointers malloc dynamic-memory-allocation