我給分配代碼是Ç - SBRK(大小)返回有效的指針但SBRK(0)是負值
dat* data = NULL;
data = sbrk(SIZE);
if((int) data != -1){
return data
}else{
printf("Not enough space");
}
的SBRK(...)函數返回一個有效的ADRESS(0x603021),但是當我進入gdb和打印sbrk(0)我得到十六進制值0xffffffff8060341。做完數學計算後,我發現指針0x8060341應該是sbrk(0)。前面的字母f(即0xfffff ...)來自哪裏?
你能向我們展示*你究竟做了什麼?你究竟得到了你所問的價值? –
更確切地說,你是如何獲得值「0xffffffff8060341」?看起來你可能在某個地方涉及到簽名擴展。你有沒有其他奇怪的「(int)」在某處投射?您目前發佈的代碼中的代碼在64位arch上無疑是無效的。 – Dolda2000
另外,你有沒有適當地包含'unistd.h'和/或編譯警告?你的問題可能是由於'sbrk'作爲int(*)(int)'隱式聲明造成的。 – Dolda2000