2015-12-08 78 views
1

我已經看過幾乎所有其他運行時檢查失敗#2問題,並且只有1個已將錯誤應用於相同的位置我有就像我的程序一樣。正如評論所說,錯誤發生在我結束main()之後。我不會分配超過數組的末尾,並且在main返回後不會更改任何內容。運行時檢查失敗#2 - 圍繞變量「素數」堆棧損壞

#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

相關問題