C++;ifstream重新分配值错误 我学习C++,遇到了一个非常奇怪的错误:我不明白为什么CydiDATNUM> 在第一个for循环之后改变。 int main() { int candidateNum; int votesArr[] = {}; string namesArr[] = {}; ifstream inputStream; inputStream.open("votedata.txt"); inputStream >> candidateNum; for (int i = 0; i < 5; i++) { inputStream >> namesArr[i]; inputStream >> votesArr[i]; cout << i << ", candidateNum: " << candidateNum << endl; } inputStream.close(); return 0; }
奇怪的是,输出是:C++;ifstream重新分配值错误 我学习C++,遇到了一个非常奇怪的错误:我不明白为什么CydiDATNUM> 在第一个for循环之后改变。 int main() { int candidateNum; int votesArr[] = {}; string namesArr[] = {}; ifstream inputStream; inputStream.open("votedata.txt"); inputStream >> candidateNum; for (int i = 0; i < 5; i++) { inputStream >> namesArr[i]; inputStream >> votesArr[i]; cout << i << ", candidateNum: " << candidateNum << endl; } inputStream.close(); return 0; },c++,C++,奇怪的是,输出是: 0, candidateNum: 5 1, candidateNum: 4000 2, candidateNum: 4000 3, candidateNum: 4000 4, candidateNum: 4000 为什么candidateNum发生了变化?我测试并发现删除inputStream>>xArr[I]行可以“修复”错误。这怎么可能?代码> > CydiDeNeNUM< /COD> GET重新分配?C++中的< P>是固定大小的,所以: int votesArr[]
0, candidateNum: 5
1, candidateNum: 4000
2, candidateNum: 4000
3, candidateNum: 4000
4, candidateNum: 4000
为什么
candidateNum
发生了变化?我测试并发现删除inputStream>>xArr[I]
行可以“修复”错误。这怎么可能?代码> > CydiDeNeNUM< /COD> GET重新分配?C++中的< P>是固定大小的,所以:
int votesArr[] = {};
这相当于:
int votesArr[0];
声明一个包含0个元素的数组,该大小在该变量期间不会更改(另一个数组也是如此)
所以当你这样做的时候:
inputStream >> votesArr[i];
您正在数组边界之外写入,并触发未定义的行为,可能会覆盖其他变量的内存,并导致各种不可预测的效果
我的建议是从旧式数组切换到std::vector
:
#include <vector>
std::vector<int> votesArr(5);
...
votesArr.resize(candidateNum);
#包括
std::矢量votesArr(5);
...
votesArr.resize(candidateNum);
我不知道你想对数组做什么,但是你可以在创建时给出大小(默认为空),你可以随时调整它的大小
#include <vector>
std::vector<int> votesArr(5);
...
votesArr.resize(candidateNum);