C++ 我的函数总是返回一个巨大的数字

C++ 我的函数总是返回一个巨大的数字,c++,arrays,C++,Arrays,现在我的函数工作得更好了,但它没有返回最小值,而是返回第二大值。。。有人能帮我吗?我找不到错误 #include <iostream> #include <cstdio> #include <cstdlib> void add_min(int*& a, int n){ int c; for(int i = 0; i < n - 1; i++){ if(a[i + 1] < a[i]){

现在我的函数工作得更好了,但它没有返回最小值,而是返回第二大值。。。有人能帮我吗?我找不到错误

#include <iostream>
#include <cstdio>
#include <cstdlib>

void add_min(int*& a, int n){
    int c;
    for(int i = 0; i < n - 1; i++){
        if(a[i + 1] < a[i]){
            c = a[i + 1];
        }
        else{
            c = a[i];
        }
    }
    std::cout<< c <<std::endl;
    for(int s = 0; s < n; s++){
        a[s] += c;
    }
    for(int z = 0;z < n; z++){
            std::cout<< a[z] <<std::endl;
    }
 }


int main(){
    int n,i;
    std::cout<< "please enter the dimention of the array" <<std::endl;
    std::cin>> n;
    int *arr = new int[n-1];
    std::cout<< "please enter the integers in the array" <<std::endl;
    for(i = 0;i < n; i++){
            std::cin>>arr[i];
    }
    add_min(arr, n);
    delete [] arr;
    return 0;
}
#包括
#包括
#包括
无效添加最小值(整数*&a,整数n){
INTC;
对于(int i=0;i你所说的这些巨大的数字是未定义输出的定义。你为什么得到这个

在循环中,您正在执行以下操作:

if(a[i + 1] < a[i])
if(a[i+1]
<>但是记住C++中的数组是零,所以在最后一次迭代中你会越界,因为<代码> i + 1 < /C> >将是代码> n>代码>,数组的大小是n-1(索引在范围[0,n-1)中运行]。 提示:调试代码可以节省时间(和生命),请使用调试器


此外,更重要的问题是,您使用的是一个初始包含垃圾值的未初始化数组。

您所说的这些庞大的数字是未定义输出的定义。为什么会出现这种情况

在循环中,您正在执行以下操作:

if(a[i + 1] < a[i])
if(a[i+1]
<>但是记住C++中的数组是零,所以在最后一次迭代中你会越界,因为<代码> i + 1 < /C> >将是代码> n>代码>,数组的大小是n-1(索引在范围[0,n-1)中运行]。 提示:调试代码可以节省时间(和生命),请使用调试器


此外,更重要的问题是,您使用的是一个初始包含垃圾值的未初始化数组。

您所说的这些庞大的数字是未定义输出的定义。为什么会出现这种情况

在循环中,您正在执行以下操作:

if(a[i + 1] < a[i])
if(a[i+1]
<>但是记住C++中的数组是零,所以在最后一次迭代中你会越界,因为<代码> i + 1 < /C> >将是代码> n>代码>,数组的大小是n-1(索引在范围[0,n-1)中运行]。 提示:调试代码可以节省时间(和生命),请使用调试器


此外,更重要的问题是,您使用的是一个初始包含垃圾值的未初始化数组。

您所说的这些庞大的数字是未定义输出的定义。为什么会出现这种情况

在循环中,您正在执行以下操作:

if(a[i + 1] < a[i])
if(a[i+1]
<>但是记住C++中的数组是零,所以在最后一次迭代中你会越界,因为<代码> i + 1 < /C> >将是代码> n>代码>,数组的大小是n-1(索引在范围[0,n-1)中运行]。 提示:调试代码可以节省时间(和生命),请使用调试器

此外,更重要的问题是,您使用的是初始包含垃圾值的未初始化数组。

问题1:

int c, a[n];
b = a[n];
a=n的大小,因此您可以在最大访问权限下
a[n-1]
,而不是
a[n]
,因为索引从0开始
,而不是从
c
中开始

问题2:

您是否初始化了数组
a
的值

在函数中初始化数组时,数组中会填充
随机值。

问题1:

int c, a[n];
b = a[n];
a=n的大小,因此您可以在最大访问权限下
a[n-1]
,而不是
a[n]
,因为索引从0开始
,而不是从
c
中开始

问题2:

您是否初始化了数组
a
的值

在函数中初始化数组时,数组中会填充
随机值。

问题1:

int c, a[n];
b = a[n];
a=n的大小,因此您可以在最大访问权限下
a[n-1]
,而不是
a[n]
,因为索引从0开始
,而不是从
c
中开始

问题2:

您是否初始化了数组
a
的值

在函数中初始化数组时,数组中会填充
随机值。

问题1:

int c, a[n];
b = a[n];
a=n的大小,因此您可以在最大访问权限下
a[n-1]
,而不是
a[n]
,因为索引从0开始
,而不是从
c
中开始

问题2:

您是否初始化了数组
a
的值


在函数中初始化数组时,数组中填充的是
随机值。

除了我在评论中提到的问题外,问题在于您使用的是未初始化的本地数组,这意味着它将包含看似随机的数据。您还可以从读取
b=a[n];


我认为您真正想做的是将完整数组作为参数传入,而不是在函数中创建新数组。

除了我在评论中提到的问题外,问题是您使用的是未初始化的局部数组,这意味着它将包含看似随机的数据。您还可以从读取一个超出边界的值开始第i个
b=a[n];


我认为您真正想做的是将完整数组作为参数传入,而不是在函数中创建新数组。

除了我在评论中提到的问题外,问题是您使用的是未初始化的局部数组,这意味着它将包含看似随机的数据。您还可以从读取一个超出边界的值开始第i个
b=a[n];


我认为您真正想做的是将完整数组作为参数传入,而不是在函数中创建新数组。

除了我在评论中提到的问题外,问题是您使用的是未初始化的局部数组,这意味着它将包含看似随机的数据。您还可以从读取一个超出边界的值开始第i个
b=a[n];


我认为您真正想做的是将整个数组作为参数传入,而不是在函数中创建新的。

这是这个程序的最小问题。我从not pass开始