当 fread 正在更改其他整数变量的值时如何解决
How to solve when fread is changing values of other integer variables
我的大学作业遇到了麻烦,我正在用 c++ 编写一些排序方法,而这恰好发生了:
int nufi = 0, d;
cout << "nufi value: " << nufi << endl;
d = fread(&item, sizeof(ItemType), 1, stripes[nStripe].arq);
cout << "nufi value: " << nufi << endl;
应该打印:
努菲价值:0
努菲值:0
但是,相反,正在打印:
努菲价值:0
nufi 值:541151813
基本上,任何通过 fread 的整型变量都会被改变;
我尝试更改变量名称、更改打开的文件和我认为的每项测试,但错误仍然存在,但并不总是使用该值,当我更改变量名称时,数字也会更改,只有当我删除 fread 时,错误消失。
其余代码都很好并经过测试,文件打开、结构、密钥等
有人知道会发生什么吗?
您遇到了未定义的行为,更改变量 names 无济于事。您有一个 type 问题,其中 item
显然不是 ItemType
类型。因此,fread
正在将额外的字节写入其他变量存储所在的堆栈。
将调用改为:
fread( &item, sizeof(item), 1, stripes[nStripe].arq );
您实际上没有显示它的类型,但我敢打赌它是ItemType*
。在这种情况下,您的语法会略有不同:
fread( item, sizeof(ItemType), 1, stripes[nStripe].arq );
// ^ Note reference removed because item is a pointer to ItemType.
我的大学作业遇到了麻烦,我正在用 c++ 编写一些排序方法,而这恰好发生了:
int nufi = 0, d;
cout << "nufi value: " << nufi << endl;
d = fread(&item, sizeof(ItemType), 1, stripes[nStripe].arq);
cout << "nufi value: " << nufi << endl;
应该打印: 努菲价值:0 努菲值:0 但是,相反,正在打印: 努菲价值:0 nufi 值:541151813
基本上,任何通过 fread 的整型变量都会被改变;
我尝试更改变量名称、更改打开的文件和我认为的每项测试,但错误仍然存在,但并不总是使用该值,当我更改变量名称时,数字也会更改,只有当我删除 fread 时,错误消失。
其余代码都很好并经过测试,文件打开、结构、密钥等
有人知道会发生什么吗?
您遇到了未定义的行为,更改变量 names 无济于事。您有一个 type 问题,其中 item
显然不是 ItemType
类型。因此,fread
正在将额外的字节写入其他变量存储所在的堆栈。
将调用改为:
fread( &item, sizeof(item), 1, stripes[nStripe].arq );
您实际上没有显示它的类型,但我敢打赌它是ItemType*
。在这种情况下,您的语法会略有不同:
fread( item, sizeof(ItemType), 1, stripes[nStripe].arq );
// ^ Note reference removed because item is a pointer to ItemType.