在C ++中打印数组错误

时间:2015-01-14 23:03:01

标签: c++ arrays cout

尝试制作一个程序,每个数字总计5位数字。出于某种原因,当我尝试打印一个数组的单个元素(一次运行一个元素5次)时,我得到正确的值69134.但是当我将它们打印在一起时:

int *addArray(int arr1[], int arr2[]){

    int arrSum[5];
    int r=0;
    for(int i=4; i>=0; i--){
        arrSum[i]=(arr1[i]+arr2[i]+r)%10;
        r=((arr1[i]+arr2[i]+r)>=10);
    }
    return arrSum;
}

int main(){

    using namespace std;
    int data1[5]={1,2,3,4,5};
    int data2[5]={5,6,7,8,9};
    int *arrSum=addArray(data1,data2);
    cout << arrSum[0] << arrSum[1] << arrSum[2] << arrSum[3] << arrSum[4];
    return 0;

}

我最终得到结果60000.任何人都知道发生了什么事?

1 个答案:

答案 0 :(得分:2)

addArray中,您将返回指向局部变量(arrSum)的指针,这会导致未定义的行为。您应该从调用函数传入结果数组,或者动态分配数组。例如,使用第一种方法:

void addArray(const int arr1[], const int arr2[], int arrSum[])
{
    int r=0;
    for(int i=4; i>=0; i--)
    {
        arrSum[i]=(arr1[i]+arr2[i]+r)%10;
        r=((arr1[i]+arr2[i]+r)>=10);
    }
}

int main()
{
    int data1[5]={1,2,3,4,5};
    int data2[5]={5,6,7,8,9};
    int arrSum[5];

    addArray(data1,data2,arrSum);
    cout << arrSum[0] << arrSum[1] << arrSum[2] << arrSum[3] << arrSum[4];
    return 0;
}