C语言学到函数,变量初始化为100就正常,初始化为10就报错(都能运行得到结果)

![图片说明](https://img-ask.csdn.net/upload/201805/14/1526233851_769687.png)图片说明
图片说明
如图,用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释放内存。