这个分配有什么问题?

时间:2013-04-05 02:49:45

标签: c memory malloc

这是我声明的结构: -

struct page_table_entry {
    struct addrspace* as;
    vaddr_t va;
    //page_state_t state;
    int timestamp;
};

现在我想为此数组动态分配内存。我的实现在这里: -

struct page_table_entry **coremap = (struct page_table_entry**)
kmalloc(npages*sizeof(struct page_table_entry*));
int i;
for(i=0;i<npages;i++)
{
    coremap[i] = (struct page_table_entry*)kmalloc(sizeof(struct page_table_entry));
    coremap[i].va=(firstAddress+(i*PAGE_SIZE));
}

它在我访问变量va的最后一行给出了一个错误。错误是: -

error: request for member `va' in something not a structure or union

3 个答案:

答案 0 :(得分:3)

你有一个指向结构的指针数组,而不是一个结构数组。

在线     coremap [i] =(struct page_table_entry *)kmalloc(sizeof(struct page_table_entry)); 你将内存分配转换为page_table_entry*,因此coremap [i]就是这个指针。

您可以通过

访问实际的结构
coremap[i]->va=(firstAddress+(i*PAGE_SIZE));

答案 1 :(得分:1)

coremap是指向struct page_table_entry的指针。

当您使用coremap[i]取消引用时,您会获得指向struct page_table_entry的指针。

您不能在指向结构的指针上使用.。您必须使用->

coremap[i]->va=(firstAddress+(i*PAGE_SIZE));

(*coremap[i]).va=(firstAddress+(i*PAGE_SIZE));

答案 2 :(得分:0)

除了对coremap[i]->va的明显更改之外,您可以更改为结构数组:

struct page_table_entry *coremap = (struct page_table_entry*)kmalloc(npages*sizeof(struct page_table_entry));
int i;
for(i=0;i<npages;i++)
{
    coremap[i].va=(firstAddress+(i*PAGE_SIZE));
}