2016-02-09 207 views
0

我正在使用Visual Studios 2015,並且遇到了問題。運行時檢查失敗#2 - 變量「myArray」周圍的堆棧已損壞。我不確定程序中哪些地方會導致我的陣列出現某種腐敗。但是當我做了涉及操作數組的計算時,幾個數字變成0.0000而不是原來的數字。有人可以幫忙嗎?陣列周圍的堆棧已損壞

#include <iostream> 
#include <iomanip> 
#include <cmath> 
using namespace std; 

int main() 
{ 
    double xmin, xmax; 
    const int POINTS = 20; 
    const double PI = 3.1416; 
    double increments; 
    double range, mean; 
    double total = 0; 
    double myArray[POINTS]; 
    double number = myArray[0]; 
    double mode = number; 
    int count = 1; 
    int countMode = 1; 

    cout << "Enter in a value for the minimum x value: "; 
    cin >> xmin; 
    cout << "Enter in a value for the maximum x value: "; 
    cin >> xmax; 

    if (xmin < 0) 
     increments = (abs(xmin) + xmax)/POINTS; 
    else 
     increments = (xmax - xmin)/POINTS; 

    int i = 0; 
    double x = xmin + increments * i; 
    double minimum = 0.0572 * cos(4.667 * x) + 0.0218 * PI * cos(12.22 * x); 
    double maximum = myArray[19]; 

    cout << setw(15) << "x |" << setw(15) << "f(x)" << endl; 
    cout << setw(32) << setfill('-') << " " << endl; 
    cout << setfill(' '); 

    for (i = 0; i <= POINTS; i++) 
    { 
     myArray[i] = 0.0572 * cos(4.667 * x) + 0.0218 * PI * cos(12.22 * x); 
     x = xmin + increments * i; 
     cout << fixed << showpos << setw(15) << setprecision(2) << x << setw(15) << setprecision(4) << myArray[i] << endl; 

     if (myArray[i] <= minimum) 
     minimum = myArray[i]; 
     if (myArray[i] > maximum) 
     maximum = myArray[i]; 
    } 

    cout << endl; 
    range = maximum - minimum; 
    for (int count = 0; count <= POINTS; count++) 
    { 
     total += myArray[count]; 
    } 
    mean = total/POINTS; 

    int temp; 
    bool swap; 
    do 
    { 
     swap = false; 
     for (int i = 0; i < POINTS - 1; i++) 
     { 
     if (myArray[i] > myArray[i + 1]) 
     { 
      temp = myArray[i]; 
      myArray[i] = myArray[i + 1]; 
      myArray[i + 1] = temp; 
      swap = true; 
     } 
     } 
    } while (swap); 


    for (int i = 0; i <= POINTS; i++) 
    { 
     if (myArray[i] == number) 
     { 
     count++; 
     } 
     else 
     { 
     if (count > countMode) 
     { 
      countMode = count; 
      mode = number; 
     } 
     count = 1; 
     number = myArray[i]; 
     } 
    } 

    cout << "The maximum value is: " << maximum << endl; 
    cout << "The minimum value is: " << minimum << endl; 
    cout << "The range is: " << range << endl; 
    cout << "The mean value is: " << mean << endl; 
    cout << "The median value is: " << (myArray[9] + myArray[10])/2 << endl; 
    cout << "The mode value is: " << mode << endl; 

    for (i = 0; i <= POINTS; i++) 
     cout << myArray[i] << endl; 

    system("pause"); 
    return 0; 
} 
+0

您可以將該代碼縮減至當前大小的1/4並僅隔離相關問題嗎?正如你所看到的是一個Wall O'Code,它爲任何想要幫助的人提供了一個巨大的進入門檻,可能大部分與手邊的問題無關。 (作爲獎勵,你甚至可能在過程中自己發現問題) –

+0

'for(int i = 0; i <= POINTS; i ++)'是錯誤的。 myArray [POINTS]超出界限。 – drescherjm

回答

2
double myArray[POINTS]; 

myArray是的20個雙陣列 - myArray[0]通過myArray[19]

for (i = 0; i <= POINTS; i++) 
{ 
    myArray[i] = 0.0572 * cos(4.667 * x) + 0.0218 * PI * cos(12.22 * x); 

這套myArray[0]myArray[20]。訪問myArray[20]是不允許的,因爲那是20元素數組的第21個元素。

請注意,編譯器並不總是足夠好,可以爲您檢測到這個問題。 Visual C++在這裏通過導致程序崩潰而信任你。

+0

非常感謝 – Lucky

相關問題