gpt4 book ai didi

c - 内存分配 结构数组结构数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:46 29 4
gpt4 key购买 nike

我正在尝试用 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

这也行,现在我为集合中的 block 数组分配内存

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 个元素的 block 结构数组。

希望大家能帮帮我!

最佳答案

首先,在您的代码中,您的内存分配是错误的。您为每个内存分配提供了错误的大小。例如,

cache = malloc(sizeof(cache));

应该是

cache = malloc(sizeof(*cache));

同样。

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

关于c - 内存分配 结构数组结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40314139/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com