这是我声明的结构: -
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
答案 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));
}