我回来时似乎得到了腐败的价值观。图像说明了循环的输出。
// loop
float *bo = getBoundaries(); // this calls the method displayed below
cout << "\ngetDisplay: " << bo[0];
// loop
float* getBoundaries()
{
cout << "\ngetB: " << x1; // this displays the correct value
float boundaries[4] = {};
boundaries[0] = x1;
boundaries[1] = x2;
boundaries[2] = y1;
boundaries[3] = y2;
cout << "\nfinal: " << boundaries[0]; // this also displays the correct value
return boundaries;
}
这种情况发生在我从调试模式更改为发布模式时,但现在它已经影响了调试和发布。
答案 0 :(得分:4)
return boundaries;
使用指向超出范围的本地函数的指针是未定义的行为。当getBoundaries()
返回时,boundaries
本地超出范围,因此取消引用返回的指针可以执行任何操作,包括使程序崩溃。
由于数组不能通过值返回但结构可以返回,因此一个选项是返回包含数组的结构:
struct boundaries {
float v[4];
};
boundaries getBoundaries() {
boundaries b;
b.v[0] = x1;
b.v[1] = x2;
b.v[2] = y1;
b.v[3] = y2;
return b;
}
// Then in your loop:
boundaries bo = getBoundaries();
cout << "\ngetDisplay: " << bo.v[0];
你也可以返回std::vector<float>
或(如果你有C ++ 11),那么最好的选择是std::array<float, 4>
。