我有一个基本困扰的问题。首先,我有两个全局数组-trustArray []和fashionArray []。这是填充trustArray的函数:
void getTrust()
{
string line;
int reachedTrust=0;
int numberOfTrustsRecorded=0;
ifstream myfile ("BuyingJeans.Hw5 (1).csv");
if (myfile.is_open())
{
while ( myfile.good() )
{
getline (myfile,line,',');
//int found=line.find("Like-Purchase");
if (line=="Trust-Like"){
reachedTrust=1;
getline (myfile,line,',');
}
if(reachedTrust==1){
if(numberOfTrustsRecorded <6){
double testValue = atof(line.c_str());
trustArray[numberOfTrustsRecorded] = testValue;
numberOfTrustsRecorded++;
}
}
}
myfile.close();
}
else
cout << "Unable to open file";
}
由于某些原因,此函数中的
atof()
更改了fashionArray []中的两个值。如果我将atof()
更改为atoi()
,该问题将不再发生。这是填充要更改的数组的方法(fashionArray []):void getFashion(){
string line;
int reachedFashion=0;
int numberOfFashionsRecorded=0;
ifstream myfile ("BuyingJeans.Hw5 (1).csv");
if (myfile.is_open())
{
while ( myfile.good() )
{
getline (myfile,line,',');
if (line=="Like-Fash -->"){
reachedFashion=1;
getline (myfile,line,',');
//cout<<line<<endl;
//getchar();
}
if(reachedFashion==1){
if(numberOfFashionsRecorded <6){
fashionArray[numberOfFashionsRecorded] = atoi(line.c_str());
numberOfFashionsRecorded++;
}
}
}
myfile.close();
}
else cout << "Unable to open file";
}
这是调用这两个方法的主要方法:
int main () {
getFashion();
getTrust();
for(int x=0; x<6;x++)
cout<<fashionArray[x]<<endl;
getchar();
return 0;
}
fashionArray的前两个值最终被更改为一些非常大的负整数和正整数。一件有趣的事情是,如果我颠倒了在main()方法中调用这两种方法的顺序,该问题将不再发生。任何人都不知道是什么原因造成的吗?
最佳答案
我认为您正在写的内容超出了trustArray
的范围。您尚未提供初始化代码(请提供),但我想它看起来像这样:
float trustArray[N];
float fashionArray[N];
N等于某个正整数。我的猜测是您的情况是
fashionArray
。在循环中,测试该
N=5
。将通过该测试的numberOfTrustsRecorded < 6
的值为0、1、2、3、4、5。这是六(6)个浮点数,可以容纳5个数组。写入numberOfTrustsRecorded
将覆盖内存。更改测试或将缓冲区大小增加到6。为什么在fashionArray [0]中看不到有效值?我不知道。也许您的编译器调整了fashionArray内存缓冲区,以便覆盖在未使用的内存中开始,从而使IEEE浮点运算所需的位剩下一半。存储器中的任何位都构成一个随机浮点数。内存转储将显示问题。
为什么以相反的顺序运行该方法有效?可能该错误仍然存在,但是每秒运行
numberOfTrustRecorded[5]
可以清除getFashion()
留下的混乱情况。您覆盖的内存是您的,因此,只要您不试图理解它,就不会有人抱怨。初始化getTrust()
,运行fashionArray[0] = 0.0
,然后在运行getTrust()
之前查看fashionArray[0]
。您可能会看到随机浮动。关于c++ - 更改全局数组的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10038182/