小编Lum*_*mox的帖子

减去指针p - (p - 1)如何创建整数溢出?

这是代码:

#include <stdio.h>
int main()
{
  int i = 3;
  int *p = &i;
  p - (p - 1);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器(gcc)警告外部减法的整数溢出:

[user@comp c]$ gcc foo.c
foo.c: In function ‘main’:
foo.c:6:5: warning: integer overflow in expression [-Woverflow]
   p - (p - 1);
     ^
Run Code Online (Sandbox Code Playgroud)

在我的机器上获得了正确的结果1.

为什么?

这是因为指针地址是无符号整数但是ptrdiff_t是一个有符号的int并且无法处理那些大数字?

我看到了

p - (p);
Run Code Online (Sandbox Code Playgroud)

p - (p + 1);
Run Code Online (Sandbox Code Playgroud)

不要引起溢出.

我试图了解幕后发生的事情.这是我关于stackoverflow的第一个问题,如果我的问题可以改进,请告诉我.

c pointers integer-overflow

3
推荐指数
1
解决办法
212
查看次数

标签 统计

c ×1

integer-overflow ×1

pointers ×1