gpt4 book ai didi

c++ - atof 改变全局数组的值

转载 作者:行者123 更新时间:2023-11-28 03:38:39 27 4
gpt4 key购买 nike

我有一个问题基本上让我感到困惑。首先,我有两个全局数组 - 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并进入 fashionArray .您没有提供初始化代码(请提供),但我想它看起来像这样:

float trustArray[N];
float fashionArray[N];

N 等于某个正整数。我的猜测是,在你的情况下,N=5 .

在你的循环中,你测试 numberOfTrustsRecorded < 6 . numberOfTrustsRecorded 的值将通过该测试的是 0、1、2、3、4、5。这是六 (6) 个 float 以适合 5 的数组。写作 numberOfTrustRecorded[5]会覆盖内存。更改测试或将缓冲区大小增加到 6。

为什么您在 fashionArray[0] 中看不到有效值?我不知道。也许您的编译器对齐了 fashionArray 内存缓冲区,因此覆盖从未使用的内存开始,从而使您只剩下制作 IEEE float 所需的一半位。内存中的任何位都构成一个随机 float 。内存转储会显示问题。

为什么以相反的顺序运行该方法有效?可能错误仍然存​​在,但正在运行 getFashion()第二个清理 getTrust() 留下的烂摊子.你覆盖的内存是你的,所以只要你不试图理解它,就没有人会提示。初始化 fashionArray[0] = 0.0 , 运行 getTrust()看看fashionArray[0]运行前getFashion() .您可能会看到随机 float 。

关于c++ - atof 改变全局数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10038182/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com