linux环境下求孪生素数的代码错误
程序代码:
#include <stdio.h> #include <unistd.h> int isPrimer(int i) { int j; for(j = 2;j <= i;++j){ if( i % j==0) break; } if(i==j) return 1; else return 0; } int isTwinPrimer(int a,int b) { if((b-a)== 2) return 1; return 0; } main() { int *p1=sbrk(0); int *r1=p1,*r2=p1,*p2=p1; int i ,j,k = 1; for(i= 1;i<=100;++i) { if(isPrimer(i)){ brk(r1+ 1); *r1 = i; r1 = sbrk(0); } } r1=p1+1; p2=sbrk(0); r2=p2; while(r1!=sbrk (0))//这行代码好像陷入了无限循环,但是如果改成r1!=p2,就会正确的计算下去。请问各位大神是什么问题? { if(isTwinPrimer(*(r1-1),*r1)) { brk(r2+1); *r2=*(r1-1); r2=sbrk(0); brk(r2+1); *r2=*r1; r2=sbrk(0); } ++r1; } r2=p2; while(r2!=sbrk(0)) { printf("%d ",*r2);r2=r2+1;printf("%d\n",*r2);++r2; } brk(p2); brk(p1); return 0; } ~代码表示的是再linux环境下,利用brk和sbrk内存管理语句进行计算100以内的孪生素数。代码中标注的位置好像在linux环境下变成了无限循环,求教各位的大神是怎么回事儿?