如图,用Xcode写的。
代码如下。
第五行的 count 变量。
#include <stdio.h>
int isPrime(int num,int knownPrime[],int numOfPrime);
int main()
{
const int count=100;
int prime[count]={2};
int num=2;
int nOP=1; //numberOfPrime
while ( nOP <=count)
{
num ++;
if(isPrime(num,prime,nOP))
prime[nOP++]=num;
}
for (int j=0; j<nOP; j++)
{
printf("%d\t",prime[j]);
}
}
int isPrime(int num,int knownPrime[],int numOfPrime)
{
int ret =1;
for(int k =0;k < numOfPrime;k ++)
{
if(num % knownPrime[k] ==0)
ret =0;
}
return ret;
}
你的代码没有正确为prime分配内存,造成堆栈破坏
int prime[count]={2};
替换成
int * prime = (int *)malloc(sizeof(int) * count);
prime[0] = 2;
另外加上
#include <stdlib.h>
此时运行没有问题
你的代码在eclipse里面是无法编译链接的,提示
07:55:13 **** Incremental Build of configuration Debug for project helloC ****
make all
Building file: ../src/main.c
Invoking: Cross GCC Compiler
gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/main.d" -MT"src/main.o" -o "src/main.o" "../src/main.c"
../src/main.c: 在函数‘main’中:
../src/main.c:6:5: 错误:可变大小的对象不能被初始化
int prime[count]={2};
^~~
../src/main.c:6:23: 警告:数组初始值设定项中有多余的元素
int prime[count]={2};
^
../src/main.c:6:23: 附注:(在‘prime’的初始化附近)
make: *** [src/subdir.mk:20:src/main.o] 错误 1
07:55:13 Build Finished (took 159ms)
修改为采纳大竹的
____int * prime = (int *)malloc(sizeof(int) * count);
prime[0] = 2;
后就可以了。:),
把const int count=10;定义到mai函数外。
把数组
int prime[count]={2};
写为
int prime[count];
prime[count]=2;
也可以通过。
实际上,用malloc借了内存之后,在代码最后还要 用free释放内存。