2015-07-21 25 views
0

以下代碼在調試期間總是在delete [] p1;之前中斷。我不知道如何得到這個工作:(內存和指針在發佈之前破解

#include <iostream> 
#include <iomanip> 

int main() { 
    int N = 0; 
    double max = 0; 
    std::cin >> N; 
    double *p1 = new double[N]; 
    for (int i = 0; i < N; i++) std::cin >> p1[N]; 
    for (int i = 0; i < N - 1; i++) 
    { 
     if (p1[i] < p1[i + 1]) max = p1[i + 1]; 
     else max = p1[i]; 
    } 
    for (int i = 0; i < N; i++) 
    { 
     if (p1[i] == max) continue; 
     else std::cout << std::setprecision(2) << std::fixed << p1[i] << '\n'; 
    }**strong text** 
    std::cout << std::setprecision(2) << std::fixed << max << '\n'; 
    delete[] p1; 
    return 0; 
} 
+0

另一個問題是你的'max'搜索實際上沒有找到最大值,而且很難看出第三個循環的目的是什麼 –

回答

3

只是一個錯字:

for (int i = 0; i < N; i++) std::cin >> p1[N]; 

=>

for (int i = 0; i < N; i++) std::cin >> p1[i]; 
0

您的代碼for (int i = 0; i < N; i++) std::cin >> p1[N];是錯誤很明顯,你!想要做的是for (int i = 0; i < N; i++) std::cin >> p1[i];。順便說一下,你的意圖是什麼?找到最大值?如果是這樣,你的代碼是錯誤的,應該是:

max = p1[0]; 
for(int i=1; i<N; ++i) 
    if(max < p1[i]) 
     max = p1[i]; 
cout << max << endl; 

您可以使用上面的代碼獲取最大值。我希望這可以幫助你。