#include<unistd.h>
#include<stdio.h>
void *my_malloc(size_t size){
void *p;
void *q;
p = sbrk(0);
/* If sbrk fails, we return NULL */
q = sbrk(size);
if(q == (void *)-1){
return NULL;
}
printf("\n size : %d p : 0x%x q : 0x%x \n",size,p,q);
return p;
}
int main(){
int *p;
p = my_malloc(5);
printf("\n p : 0x%x \n",p);
}
BRK(2)將突破在給定ADRESS地址,如果成功,否則爲-1返回0。全局的errno符號表示錯誤的性質。 sbrk(2)按給定的增量移動中斷(以字節爲單位)。根據系統實現情況,它返回前一個或新中斷地址。失敗時,它返回(void *) - 1並設置errno。在某些系統上,sbrk接受負值(爲了釋放一些映射的內存)。 由於sbrk的規範沒有解決其結果的含義,因此移動中斷時不會使用返回的值。但是,我們可以使用sbrk的一個特例:當增量爲nul(即sbrk(0))時,返回的值是實際的中斷地址(前一個和新中斷地址相同)。sbrk因此用於檢索堆的開始是休息的初始位置。 所以使用sbrk作爲主要工具來實現malloc。 sbrk(0)和sbrk(size)都返回相同的地址,我期望的是sbrk(size)應該從sbrk(0)前面返回5個字節的地址。SBRK(0)和SBRK(大小)都返回相同的地址
你的實際問題是什麼? –