sbrk を使用してメモリを解放しているときに問題が発生しています。sbrk に負の値を渡しますが、ヒープの開始を減らしません。ここにコードがあります
int main(int argc, char** argv) {
void * a = sbrk(0);
printf("%p\n",a);
sbrk(2);
sbrk(-1);
a = sbrk(0);
printf("%p\n",a);
}
出力例は次のとおりです。
0x10734f000
0x10734f002
sbrk が 1 減らされた後、出力された値が 0x10734f001 として返されない理由がわかりません。
このプログラムで malloc を使用することは許可されていません。これは、sbrk を使用した malloc および free のカスタム実装用です。