C 数组的奇怪行为

C 数组的奇怪行为,c,arrays,primes,C,Arrays,Primes,这是我的代码,它在运行时不起作用(在java中可以正常工作) 但是如果我改变路线 primeNumber[size] = counter; 为了 程序在运行时不会崩溃。有人知道为什么C不接受这个命令primeNumber[size]=counter 谢谢大家! #include <stdio.h> int main(void){ int primeNumber[90]; primeNumber[0] = 2; //start with 2 int size = 1; int d

这是我的代码,它在运行时不起作用(在java中可以正常工作)

但是如果我改变路线

primeNumber[size] = counter;
为了

程序在运行时不会崩溃。有人知道为什么C不接受这个命令primeNumber[size]=counter

谢谢大家!

#include <stdio.h>

int main(void){

int primeNumber[90];
primeNumber[0] = 2; //start with 2
int size = 1;
int divisible = 0;
int i = 0;
int counter = 3;


while(counter <= 100){
    divisible = 0;

    for(i = 0; i <= size; i++){
            if(counter%primeNumber[i] == 0){ 
                divisible++;
                break;      
            }
    }

    if(divisible == 0){ 
        primeNumber[size] = counter;
        size = size + 1;
    }       

    counter++;
}

for(i = 0; i <= size; i++){
    printf("\n prime: %d", primeNumber[i]);
}


return 0;
}   
#包括
内部主(空){
整数素数[90];
素数[0]=2;//以2开头
int size=1;
整除=0;
int i=0;
int计数器=3;

而(counter这只是一个off by one错误。下面的代码中对相关点进行了注释

#include <stdio.h>

int main(void){

int primeNumber[90];
primeNumber[0] = 2; //start with 2
int size = 1;
int divisible = 0;
int i = 0;
int counter = 3;


while(counter <= 100){
    divisible = 0;

    for(i = 0; i < size; i++){ // Was error here
            if(counter%primeNumber[i] == 0){ 
                divisible++;
                break;      
            }
    }

    if(divisible == 0){ 
        primeNumber[size] = counter;
        size = size + 1;
    }       

    counter++;
}

for(i = 0; i < size; i++){ // Was error here
    printf("\n prime: %d", primeNumber[i]);
}


return 0;
}  

您在初始值为
size
for
循环中有一个错误。由于您使用
i大小值增长到98,而数组大小为90,因此将大小增加到100,这将解决您的问题

#include <stdio.h>

int main(void){

int primeNumber[100]; //increased size to 100
primeNumber[0] = 2; //start with 2
int size = 1;
int divisible = 0;
int i = 0;
int counter = 3;


while(counter <= 100){
    divisible = 0;
    //replaced <= with < to avoid floating     point exception
    for(i = 0; i < size; i++){ 
            if(counter % primeNumber[i] == 0){
                divisible++;
                break;
            }
    }

    if(divisible == 0){
        primeNumber[size] = counter;
        size = size + 1;
    }

    counter++;
}

for(i = 0; i <= size; i++){
    printf("\n prime: %d", primeNumber[i]);
}
return 0;
}
#包括
内部主(空){
int primeNumber[100];//将大小增加到100
素数[0]=2;//以2开头
int size=1;
整除=0;
int i=0;
int计数器=3;

while(反奇怪行为->未定义行为,很可能…在使用数组的各种索引之前,您没有初始化数组
primeNumber
。在
while
循环的第一次迭代中,在
for
循环的第二次迭代中,
primeNumber[1]
未初始化。大多数迭代都会发生这种情况,正如iharob所说,调用未定义的行为。
size
的最大值会变成什么?想想如果它等于或大于
90
会发生什么。另外,既然您使用了
我使用了调试器吗?设置断点?检查变量?
 prime: 2
 prime: 3
 prime: 5
 prime: 7
 prime: 11
 prime: 13
 prime: 17
 prime: 19
 prime: 23
 prime: 29
 prime: 31
 prime: 37
 prime: 41
 prime: 43
 prime: 47
 prime: 53
 prime: 59
 prime: 61
 prime: 67
 prime: 71
 prime: 73
 prime: 79
 prime: 83
 prime: 89
 prime: 97
#include <stdio.h>

int main(void){

int primeNumber[100]; //increased size to 100
primeNumber[0] = 2; //start with 2
int size = 1;
int divisible = 0;
int i = 0;
int counter = 3;


while(counter <= 100){
    divisible = 0;
    //replaced <= with < to avoid floating     point exception
    for(i = 0; i < size; i++){ 
            if(counter % primeNumber[i] == 0){
                divisible++;
                break;
            }
    }

    if(divisible == 0){
        primeNumber[size] = counter;
        size = size + 1;
    }

    counter++;
}

for(i = 0; i <= size; i++){
    printf("\n prime: %d", primeNumber[i]);
}
return 0;
}