0

这是我声明的结构:-

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
4

3 回答 3

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));
于 2013-04-05T02:53:04.757 回答
1

coremap是指向 a 的指针的指针struct page_table_entry

当你取消引用它时,coremap[i]你会得到一个指向struct page_table_entry.

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

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

或者

(*coremap[i]).va=(firstAddress+(i*PAGE_SIZE));
于 2013-04-05T02:54:50.097 回答
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));
}
于 2013-04-05T02:54:26.487 回答