堆上链接列表结构的C数组

时间:2017-04-05 13:31:27

标签: c struct heap

printf(“pointer =%p \ n”,line);

  

块引用

     

块引用

1 个答案:

答案 0 :(得分:2)

嗯,代码被滥用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;
        }
    }
}

需要注意的关键事项:

  1. 我删除了所有的typedef。它们在这里没有任何实际意义,但试图保存打字。他们是以代码质量为代价的。我也从struct中删除了它,因为我相信之前的声明也适用于它。

  2. 我按规范分配内存。通过编写malloc(sizeof(*pointer_variable)),无论pointer_variable指向什么,都可以分配足够的内存。它有些类型不可知。

  3. 我使用“链接遍历”习惯来遍历链表。我没有跟踪“节点”,而是跟踪指向节点的指针。在开头它是cache[i],并且在每次迭代时它都成为新分配节点内的指针。