C堆上的链接列表结构数组
答
好了,其实代码非常具有typedef
滥用混淆可能走很长的路向两个你和编译器的问题。我自己不会在这个程序中有一个typedef。它在这里没有真正的抽象。下面是我建议(错误检查的一些遗漏):
struct cache_line {
char valid;
mem_addr_t tag;
struct cache_line* next;
};
struct cache_line** cache;
void initCache()
{
cache = malloc (sizeof(*cache) * S);
for (int i = 0; i < S; i ++){
struct cache_line** curr_p = &cache[i];
for (int j = 1; j < E; j++){
*curr_p = malloc(sizeof(**curr_p));
(*curr_p)->valid = 0;
(*curr_p)->tag = 0;
(*curr_p)->next = NULL;
curr_p = &(*curr_p)->next;
}
}
}
重点要注意的事情:
我删除了所有的类型定义。他们在这里没有真正的目的,而是尝试保存打字。他们是以代码质量为代价的。我也将其从
struct
中删除,因为我相信前面的说法也适用于它。我分配了规范的内存。通过编写
malloc(sizeof(*pointer_variable))
,无论pointer_variable
指向什么,都可以分配足够的内存。它有点类型不可知论者。我用“链接遍历”成语遍历链表。我不跟踪“节点”,而是跟踪指向节点的指针。在开始时它是
cache[i]
,并且在每次迭代时它都变成新分配节点内的指针。
用typedefing指针怎么这么酷......真的吗? –
@SouravGhosh - 收入保障。它使得代码非常糟糕,以至于没有人能够站在调试它的地方,而只是自己。 – StoryTeller
我不知道大声笑,骨架代码是这样的,我觉得它真的很奇怪 – genericmathstudent