(void*)-1的意义

tom*_*mol 5 c memory pointers system-calls

我正在查看sbrk系统调用的文档,发现这个:

成功时,sbrk()返回上一个程序中断.(如果中断增加,则此值是指向新分配的内存的开始的指针).出错,(void *) -1返回,并errno设置为ENOMEM.

现在,

  1. 有什么意义(void *) -1

  2. 它指向的确切内存地址是什么?(如果确实如此)

  3. 如何保证(void *) -1不是sbrk()成功返回的有效地址?

Mic*_*ser 6

(void *) -1 == (size_t) -1
Run Code Online (Sandbox Code Playgroud)

0xFFFFFFFF位于32位机器和0xFFFFFFFFFFFFFFFF64位机器上,是一个无效的地址,应该比任何其他地址都大.

  • @tomol,阅读[2s补](https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html) (3认同)
  • @tomol,想到它在另一个方向,多少是'0xFFFFFFFF + 1`?它是'0`!......一旦变量因为它的比特限制而经历溢出,就会发生有趣的事情;-) (3认同)