我正在尝试在内存中的特定地址处动态分配以下结构的数组。我将指针struct page_frame* memBlocks用作数组的开始,但是对于for循环中使用memBlocks[i]的下一个元素的每次访问仅移动8个字节。我在gdb中检查了结构的大小,该结构显示了预期的16个字节,那么为什么以这种方式访问​​指针呢?

struct page_frame{
struct page_frame* next; //Next node of linked list
int used;

};

struct page_frame* memBlocks;

memBlocks = (struct page_frame*)0xffffffff80000000 + physFree;
int indices = ((int)physEnd/4096)


for(int i = 0; i < indices; i++)
{
    struct page_frame temp;
    temp.used = 3;
    temp.next = (struct page_frame*)&memBlocks[i+1];
    memBlocks[i] = temp;
}

最佳答案

我通过将每个元素设置为等于temp来覆盖我的结构。我可以用以下方法修复它。

struct page_frame* memBlocks = (struct page_frame*)0xffffffff80000000 + physFree;

int indices = ((int)physEnd/4096);
//struct page_frame arr[physEnd];


for(int i = 0; i < indices; i++)
{

    memBlocks[i].used = 1;
    memBlocks[i].next = &memBlocks[i+1];

}

10-04 18:33