分配内存 这个循环中 i 为什么会变小呢? 看了半天也没发现为什么…解决方案
分配内存 这个循环中 i 为什么会变小呢? 看了半天也没发现为什么……
我的代码
然后终端显示出:
……
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数组已经越界了,导致不能预期的结果发生。
我的代码
- 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数组已经越界了,导致不能预期的结果发生。