Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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++ - Fatal编程技术网

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);