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环境下变成了无限循环,求教各位的大神是怎么回事儿?





