简体   繁体   English

错误的数组变量被更改

[英]Wrong array variable getting changed

In the following function I clearly change the variable rightArray through the statement: rightArray[i] = dataValues[i];在下面的函数中,我通过语句清楚地改变了变量rightArrayrightArray[i] = dataValues[i];

However the behaviour I'm getting from the function is that the variable leftArray is changing in place of rightArray然而,我从函数中得到的行为是变量leftArray代替rightArray发生rightArray

//Returns the interquartile range
float StatisticalAnalyser::getInterquartileRange()
{
    float interquartileRange = 0;

    int numberOfDatums = dataFile.findNumberOfDatums();
    float numberOfDatumsFloat = dataFile.findNumberOfDatums();
    float dataValues[dataFile.findNumberOfDatums()];

    dataFile.initialiseArrayToFileData(dataValues);

    //If even number of datums
    if (numberOfDatums % 2 == 0)
    {
        //Arrays for for each side of the median
        int arraySize = numberOfDatumsFloat/2;
        float leftArray[numberOfDatums/2];
        float rightArray[numberOfDatums/2];

        //Initialise arrays for each side of the median
        for (int i = 0; i < numberOfDatums; i++)
        {
            if (i < numberOfDatums/2)
            {
                leftArray[i] = dataValues[i];
            }
            if (i >= numberOfDatums/2)
            {
                //leftArray SOMEHOW GETS CHANGED INSTEAD OF RIGHT ARRAY
                rightArray[i] = dataValues[i];

leftArray gets changed instead of rightArray here : rightArray[i] = dataValues[i];这里的 leftArray 被更改而不是 rightArrayrightArray[i] = dataValues[i];

            }
        }
    }

    if (numberOfDatums % 2 == 0.5)
    {
        //Not relevant, isn't triggered when problem occurs
    }

    return interquartileRange;
}

I am running Xcode 10.1, and want to know how to fix this error so that rightArray is changed by the function instead of leftArray .我运行Xcode的10.1,并想知道如何让解决这个错误rightArray是由函数,而不是改变leftArray

Having拥有

    float leftArray[numberOfDatums/2];
    float rightArray[numberOfDatums/2];

in

       if (i >= numberOfDatums/2)
        {
            //leftArray SOMEHOW GETS CHANGED INSTEAD OF RIGHT ARRAY
            rightArray[i] = dataValues[i];

you go out of rightArray and randomly write in leftArray (of course this is an undefined behavior)你走出rightArray并随机写入leftArray (当然这是一个未定义的行为)

must be必须是

       if (i >= numberOfDatums/2)
        {
            rightArray[i - numberOfDatums/2] = dataValues[i];

Furthermore, to have此外,要有

       if (i < numberOfDatums/2)
        {
            ...
        }
        if (i >= numberOfDatums/2)

with i unchanged is useless, the second if can be an else , but it is also better to do two for to not have to do numberOfDatums/2 all the times just to decide which array to use. i不变是没用的,第二个if可以是else ,但最好做两个,因为不必numberOfDatums/2都做numberOfDatums/2来决定使用哪个数组。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM