阵列指针返回垃圾

Array Pointer Returns Garbage

本文关键字:返回 指针 阵列      更新时间:2023-10-16

我正在尝试减去两个相同大小的整数,而无需使用valarray使用明确环路。为此,我编写了一个函数,即subtract(int *firstarray, int *secondarray)。但是,减法在打印出的功能中正确发生。但是,当返回main()时,数组的前两个值包含垃圾。我的错误是什么

int* subtract(int* lastline, int* firstline){// takes two user defined arrays and performs subtraction
    std::valarray<int> foo (firstline, 7);  //  6 6 5 4 5 6 7
    std::valarray<int> bar (lastline,7);    //  1 8 8 8 8 8 8
    std::valarray<int> res (7);
    res=bar-foo; //subtracts two valarrays
    for (size_t i=0; i<NUMBEROFCLASSES;i++){
        cout<<res[i]<<" ";                  //prints 5 -2 -3 -4 -3 -2 -1
   }
    return &res[0];
}

int main(){
int first[7]={6,6,5,4,5,6,7};
int second[7]={1,8,8,8,8,8,8};
int *e= subtract(first, second);
cout<<endl;
for(int i=0; i<7;i++){
    cout<<e[i]<<" ";                       // prints 0 0 -3 -4 -3 -2 -1
    }
return 1;
}

res是一个具有自动存储持续时间的变量,这意味着当功能退出时,它将被销毁。e是一个悬而未决的指针,因此访问它是未定义的行为。您可以返回std::valarray

std::valarray<int> subtract(int* lastline, int* firstline){
    // Stuff
    return res;
}