我试图在不使用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;
}
答案 0 :(得分:2)
res
是一个具有自动storage duration的变量,这意味着它将在函数退出时被销毁。 e
是dangling pointer,因此访问它是未定义的行为。您可以改为返回std::valarray
。
std::valarray<int> subtract(int* lastline, int* firstline){
// Stuff
return res;
}