我的功能总是返回一个巨大的数字

时间:2014-02-16 09:32:08

标签: 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]){
            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;
}

3 个答案:

答案 0 :(得分:1)

您正在谈论的这些巨大数字是未定义输出的定义。你为什么得到这个?

在你的循环中,你正在做:

if(a[i + 1] < a[i])

但请记住,C ++中的数组从零开始,所以你在最后一次迭代中越界,因为i + 1将是n,并且数组的大小为 n-1 (索引在[0,n-1]范围内运行。)

提示:调试代码可以节省您的时间(和您的生活),使用调试器!

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

答案 1 :(得分:1)

问题1:

int c, a[n];
b = a[n];

a = n的大小,因此您可以最大限度地访问a[n-1],而不是a[n],因为索引开始from 0,而不是c中的1。

问题2:

  

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

在函数中初始化数组时,它们会填充random个值。

答案 2 :(得分:1)

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

读取值越界来开始

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