我在大学作业中遇到了麻烦,我正在用一些排序方法编写代码,这恰好发生了:
int nufi = 0, d;
cout << "nufi value: " << nufi << endl;
d = fread(&item, sizeof(ItemType), 1, stripes[nStripe].arq);
cout << "nufi value: " << nufi << endl;
这是印刷品:
nufi值:0
nufi值:0
但是,相反,是打印:
nufi值:0
nufi价值:541151813
基本上,任何通过fread传递的整数变量都会被更改;
我曾尝试更改变量名称,更改打开的文件以及我认为的每个测试并且错误仍然存在,并不总是使用该值,当我更改变量名称时,数字也会更改,只有当我删除fread时,错误才会消失.
其余的代码很好并经过测试,文件打开,结构,键等.
任何人都知道可能会发生什么?
最佳答案 您正在获得未定义的行为,更改变量名称将无济于事.您有类型问题,其中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.