2015-12-08 2 views
1

Я просмотрел почти все другие проблемы с ошибкой проверки времени выполнения # 2, и только 1 применил ошибку к тому же самому местоположению как в моей программе. Ошибка, как прокомментировано, происходит после завершения main(). Я не выделяю конец конца массива и не меняю ничего после возвращения main.Ошибка проверки времени выполнения # 2 - поврежден столбец переменной «primes»

#include <iostream> 

void findPrimes(bool primes[], const int arrSize); 
int main(){ 
    const int arrSize = 1000; 
    bool primes[arrSize]; 
    for (int x = 0; x < arrSize; x++){ 
     primes[x] = true; 
    } 
    findPrimes(primes, arrSize); //sets all non-prime numbers to false 
    for (int x = 0; x < arrSize; x++){ //I did not go past the size of the array. 
     if (primes[x]){ 
      std::cout << x << std::endl; 
     } 
    } 
    return 0; //Error occurs after this point. 
} 

void findPrimes(bool primes[], const int arrSize){ //detects and changes non-prime numbers to false 
    int temp; 
    for (int x = 2; x < arrSize; x++){ 
     temp = x + x; 
     for (int c = 0; c < arrSize; c++){ 
      if (temp > arrSize){ 
       break; 
      } 
      primes[temp] = false; 
      temp += x; 
     } 
    } 
} 

ответ

0

Ваш тест

if (temp > arrSize){ 
     break; 
} 

находится на правильном пути, чтобы убедиться, что вы не захвачена за пределы массива, но есть ошибка совсем по одному, так как индекс arrSize не действительный индекс массива, но не будет приводить к этому циклу break. Измените это следующим образом:

if (temp >= arrSize){ 
     break; 
} 

и посмотреть, что это исправить.

+0

Огромное вам спасибо, я полностью пронесся мимо этой части, когда искал ее. Сейчас он работает на 100%. – Avionix

Смежные вопросы