次のプログラムは、1 から 10 までの素数を出力します。
#include <stdio.h>
int* prime(int x,int y,int* range);
void main()
{
int *x,s=10;
int i=0;
x=prime(1,10,&s);
for(i=0;i<s;i++)
{
printf("%d\n",x[i]);
}
}
int* prime(int x,int y,int *range){
int num[100],i,j,flag,inc=0;
for(i=x;i<=y;i++)
{
flag=1;
for(j=2;j<=(i/2);j++)
{
if(i%j == 0)
flag=-1;
}
if(flag==1)
{
num[inc]=i;
inc++;
}
}
*range=inc;
//printf("$$%d$$",*range);
return num;
}
上記の場合、出力は 1 2 3 5 0 ですが、prime 関数の printf ステートメントのコメントを削除し、通常の printf ステートメントとして与えると、出力は 1 2 3 5 7 になります。ここのバグは何ですか??
私が使用したコンパイラは、Linux プラットフォームの GCC コンパイラです。