我正在处理一个有输入文件的程序,它可以添加,删除或打印字符串。我的print
函数正常工作,但是当我取消显示所显示的代码行时,我遇到了分段错误。
int main()
{
vector <string> vec; //Creates an empty vector
string command;
string word;
int index;
ifstream fin;
fin.open("datalabvec.dat"); //Opens the input file
if (!fin)
cout << "The input file does not exist" << endl << endl;
else
{
fin >> command;
while (fin)
{
if (command =="Add")
{
fin >> word >> index;
//addVec (vec, word, index);
}
//if (command == "Remove")
//{
//fin >> index;
//remVec (vec, index);
//}
// else //Print function
{
printVec(vec);
}
fin >> command;
}
}
}
void addVec(vector <string> &v, string word, int ind)
{
int size = v.size();
if (ind > size + 1)
cout << "Invalid adding at index " << ind << endl;
else
{
v.insert(v.begin()+ind, word);
}
}
void remVec(vector <string> &v, int ind)
{
int size = v.size();
if (ind > size)
cout << "Invalid removing at index " << ind << endl;
else
{
v.erase(v.begin() + ind);
}
}
void printVec(const vector <string> v)
{
int size = v.size();
for (int i = 0; i < size; i++)
{
cout << v[i] << "\t";
}
cout << endl;
}
Remove 0
Add Student 0
Add Kid 0
Add Final 1
Add Grow 1
Add Note 2
Add Bad 6
Remove 5
Add Worse -1
Print
Add Rich 5
Remove 1
Remove 7
Add Mind 2
Remove 3
Print
答案 0 :(得分:0)
在你的添加功能中。我猜你错误地在if语句中写了大小+ 1。它应该是size-1,因为vector的最后一个成员的大小为1。 [0] - [size-1]。正确的陈述是if(ind&gt; = size)或ind&gt;大小-1。就像你在编写器函数中用于for循环一样。
正如布拉德在下面的评论中所说。最好检查天气ind&gt; = 0。
void addVec (vector <string> &v, string word, int ind)
{
int size = v.size();
if (ind < 0 || ind >= size)
cout << "Invalid adding at index " << ind << endl;
else
{
v.insert(v.begin()+ind, word);
}
}
void remVec (vector <string> &v, int ind)
{
int size = v.size();
if (ind < 0 || ind >= size)
cout << "Invalid removing at index " << ind << endl;
else
{
v.erase(v.begin() + ind);
}
}