[英]Wrong array variable getting changed
In the following function I clearly change the variable rightArray
through the statement: rightArray[i] = dataValues[i];
在下面的函数中,我通过语句清楚地改变了变量
rightArray
: rightArray[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 被更改而不是 rightArray :
rightArray[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.