首先,当我收到错误时,我正在使用XCode C ++。我将指针变量声明为常量,并将值设置为一次。然后在代码中循环运行3-5次并且第一次正确但是然后根据变量的数量,坐标的值变为接近0(即4.59163e-41)。我知道内存地址不会改变,只是它所持有的值。此外,我正在处理大量数据,我的意思是2,000到20,000个坐标。我确定无论是大问题还是小问题都会导致这种情况发生,所以任何帮助都会受到赞赏。下面是更改[not-so]常量变量的一些代码:
我在头文件中将它们声明为:
const float* m_xPointValues;
const float* m_yPointValues;
然后在.cpp文件中,我将它们设置在以下函数中:
void ccGraphDisplay::setPointValues(float* xPointValues, float* yPointValues, unsigned numberOfPoints)
{
assert(xPointValues);
assert(yPointValues);
m_xPointValues = xPointValues;
m_yPointValues = yPointValues;
m_numberOfPoints = numberOfPoints;
....}
然后在循环函数中我移动它们但据我所知这不会改变它们的值:
for (unsigned i=0;i<m_numberOfPoints;++i)
{
shiftedXValue = (((m_xPointValues[i] - m_xAbsoluteMin)/(m_xAbsoluteMax-m_xAbsoluteMin))*(m_roi[2]-m_roi[0]))+m_roi[0];
shiftedYValue = (((m_yPointValues[i] - m_yAbsoluteMin)/(m_yAbsoluteMax-m_yAbsoluteMin))*(m_roi[3]-m_roi[1]))+m_roi[1];
}
对我而言,这是一个非常奇怪的错误。我不会在其他任何地方更改m_xPointValues或m_yPointValues的值,而在最大的数据集中,只会更改坐标的末尾部分。我还设置循环来打印循环开始和结束时的值,结束总是与开头相同,但是当循环重新开始时,它的值发生变化。
最后我尝试过的一些调试思路包括: 1)将指针从存储浮点数更改为双精度数 2)将指针更改为不再是常量 3)传递常数值(双倍和浮动)
非常感谢任何帮助(包括尝试的想法!)。 谢谢!
答案 0 :(得分:1)
这听起来像xPointValues
和yPointValues
指向的位置,您传递给setPointValues
,与m_xPointValues
和{{1}的生命周期不同}。