数组指针返回垃圾

时间:2017-12-21 14:57:35

标签: c++ pointers

我试图在不使用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;
}

1 个答案:

答案 0 :(得分:2)

res是一个具有自动storage duration的变量,这意味着它将在函数退出时被销毁。 edangling pointer,因此访问它是未定义的行为。您可以改为返回std::valarray

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