为什么 Dev C++ 在 运行 整个代码找到 10 个元素之间的最高和最低数字之前停止工作?

Why does Dev C++ stop working before running the whole code in finding highest and lowest number between 10 elements?

这是我用来查找 10 个元素之间的最高和最低数字的代码:

#include <iostream>
using namespace std;

#define SIZE 10
void acceptNumbers (int Numbers[SIZE]);
int High(int Numbers[SIZE]);
int Low(int Numbers[SIZE]);

void acceptNumbers(int Numbers[SIZE])
{int i, *max, *min;
    for (i=0; i<SIZE; i++)
    cin>>Numbers[i];

    max = Numbers;
    min = Numbers;
}

int High(int Numbers[SIZE])
{int i, *max;
    for (i = 0; i < SIZE; i++)
    {
        if (*(Numbers+i) > *max)
            max = (Numbers+i);
    }
    cout<<*max;
}

int Low(int Numbers[SIZE])
{int i, *min;
    for (i = 0; i < SIZE; i++)
    {
        if (*(Numbers+i) < *min)
        min = (Numbers+i);
    }
    cout<<*min;
}

int main()
{
    int arr[SIZE];

    cout<<"Enter Elements: \n";
    acceptNumbers(arr);

    cout<<"Highest Number: ";
    High(arr);
    cout<<endl;

    cout<<"Lowest Number: ";
    Low(arr);
    cout<<endl;
    }

在我的电脑上,它没有 运行 整个程序。当它到达查找最高和最低数字的代码时它就停止了

这是我正在做的家庭作业,我不能使用任何快捷方式和诸如此类的东西,因为给出了需要使用的代码行。所以我在另一台 PC 上尝试 运行ning 这段代码,它工作得很好:

我也试过 运行在在线 C++ 编译器上使用它,但它仍然不起作用。我无法在线找到解决方案,所以这是我最后的选择,请帮助我

Low() 和 High() 函数只声明了 int* max, min 但从不初始化。尽管他们持有无效地址。

if (*(Numbers + i) > *max)

此函数导致分段错误,因为您的程序试图取消引用无效的内存地址。

如果你想存储 int *min, *max 使它们成为全局的或在 main() 中声明它们。

您的代码表现出未定义的行为

在您的每个函数中,您都将 minmax 声明为局部变量。因此,当您在 acceptNumbers() 中初始化 min/max 时,它们仅在该函数中初始化。您根本没有在 High()/Low() 中初始化 min/max 变量。当这些函数试图取消引用那些未初始化的变量时,您的代码会崩溃。

此外,您的 High()/Low() 函数具有非 void return 类型,但实际上 return 没有任何值。

试试这个:

#include <iostream>
using namespace std;

#define SIZE 10
void acceptNumbers (int Numbers[SIZE]);
int High(int Numbers[SIZE]);
int Low(int Numbers[SIZE]);

void acceptNumbers(int Numbers[SIZE])
{
    for (int i=0; i<SIZE; i++)
        cin>>Numbers[i];
}

int High(int Numbers[SIZE])
{
    int *max = Numbers;
    for (int i = 1; i < SIZE; i++)
    {
        if (*(Numbers+i) > *max)
            max = (Numbers+i);
    }
    return *max;
}

int Low(int Numbers[SIZE])
{
    int *min = Numbers;
    for (int i = 1; i < SIZE; i++)
    {
        if (*(Numbers+i) < *min)
            min = (Numbers+i);
    }
    return *min;
}

int main()
{
    int arr[SIZE];

    cout<<"Enter Elements: \n";
    acceptNumbers(arr);

    cout<<"Highest Number: ";
    cout<<High(arr);
    cout<<endl;

    cout<<"Lowest Number: ";
    cout<<Low(arr);
    cout<<endl;
}