分配内存 这个循环中 i 为什么会变小呢? 看了半天也没发现为什么…解决方案

分配内存 这个循环中 i 为什么会变小呢? 看了半天也没发现为什么……
我的代码
C/C++ code

#include <pthread.h>
#include <stdlib.h>

#include <stdio.h>



int main()
{
    int *p[1024*100];
    int i = 0;

        int ii = -1;


    while((p[i++]=malloc(1024*1024*100)) != NULL)
    {
        printf("p+i is %ld , i is %d\n",p+i,i);
        if(i<ii)
        {
            exit(0);
        }
        ii = i;
    }

    int q = 0;
    scanf("%d",&q);
    printf("out now ,exit()");
    exit(0);
    return 0;

}




然后终端显示出:
……
p+i is 140734931560360 , i is 102385
p+i is 140734931560368 , i is 102386
p+i is 140734931560376 , i is 102387
p+i is 140734931560384 , i is 102388
p+i is 140734931560392 , i is 102389
p+i is 140734931560400 , i is 102390
p+i is 140734931560408 , i is 102391
p+i is 140734931560416 , i is 102392
p+i is 140734931560424 , i is 102393
p+i is 140734931560432 , i is 102394
p+i is 140734931560440 , i is 102395
p+i is 140734931560448 , i is 102396
p+i is 140734931560456 , i is 102397
p+i is 140734931560464 , i is 102398
p+i is 140734931560472 , i is 102399
p+i is 140734931560480 , i is 102400
p+i is 140734931560488 , i is 102401
p+i is 140734930748488 , i is 901
……

有兄弟看出原因了吗? 唉 我越来越笨了啊……


------解决方案--------------------
int *p[1024*100];

p+i is 140734931560488 , i is 102401
p+i is 140734930748488 , i is 901

最后一次循环的时候,p数组已经越界了,导致不能预期的结果发生。