释放前内存和指针中断

时间:2015-07-21 03:21:12

标签: c++ pointers memory-leaks

以下代码在调试期间始终在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;
}

2 个答案:

答案 0 :(得分:3)

只是一个错字:

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

=&GT;

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

答案 1 :(得分: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;

您可以使用上面的代码来获得最大值。我希望这可以帮到你。