常量变量正在变化但不在内存中

时间:2014-07-08 20:22:00

标签: c++ xcode pointers constants

首先,当我收到错误时,我正在使用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)传递常数值(双倍和浮动)

非常感谢任何帮助(包括尝试的想法!)。 谢谢!

1 个答案:

答案 0 :(得分:1)

这听起来像xPointValuesyPointValues指向的位置,您传递给setPointValues,与m_xPointValues和{{1}的生命周期不同}。