簡體   English   中英

成功分配指針后,無法將值分配給結構指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM