[英]Cannot assign values to a struct pointer, after pointer was successfully assigned
我正在编写一个早期的 kernel 堆来在最终堆运行之前管理一些 memory 分配。 当我为我的结构指针分配一个地址(不被其他任何东西使用)时,它起作用了,当我尝试为结构成员分配值时问题就来了。
在您回答之前,请记住,我没有任何可以使用的 C 库。 通过远程使用 QEMU 和 gdb 进行调试。
//The struct
typedef struct mem_block{
mblock_t *prev;
boolean used;
size_t size;
mblock_t *next;
} mblock_t;
//The file-local pointer(before its init)
mblock_t *eheap=NULL;
//Function that assigns the values
mblock_t *init_early_heap(address_t start, size_t size){
if(eheap==NULL){
if(size < sizeof(mblock_t)){
PANIC("Available memory below EHEAP requirement");
}
eheap = (mblock_t*)HEAP_START_ADDRESS;
eheap->prev = NULL;
eheap->next = NULL;
eheap->size = (size_t)(size - sizeof(mblock_t));
eheap->used = false;
print("\nCreated Early Heap at ");
print_hex_long(eheap);
print("\nSize in bytes: ");
print(itos(eheap->size));NL;
}
return eheap;
}
在 function 返回后,我得到一个指向地址 0xC0000000 的指针和未触及的成员,因为 eheap->size 为 0(function 中的 size 参数不为 0)。
发现的问题:无法在 QEMU 中读取整个地址空间(A20 开启),使用低位地址可以正常工作。 上面的 C 代码是正确的,现在问题仍然存在于 QEMU/GRUB。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.