内存分配结构与结构数组和结构数组



我试图用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个元素的struct数组的内存

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 = malloc(sizeof(cache));
应该

cache = malloc(sizeof(*cache));

,同样。

之后,cache->set->blocks[i]的类型是block_t,而不是block_t *,因此根本不需要动态分配内存。

相关内容

  • 没有找到相关文章

最新更新