[英]Segmentation fault when searching in vector
当我尝试在向量中搜索特定值时出现分段错误。 该向量的类型为 Person
struct Person{
string name;
string address;
string email;
string number;
string SocialSec;
string other;
};
这是我的搜索功能:
void searchContact(vector<Person> &people) {
string searchTerm;
cout << endl;
cout << "Enter search term: ";
getline(cin, searchTerm);
vector<Person>::iterator it=find(people.begin(), people.end(), searchTerm);
if (it != people.end()){
cout << *it;
}else{
cout << "Element not found\n";
}
}
这是 == 和 << 运算符的运算符重载:
ostream& operator<<(ostream &stream, const Person &it){
stream << it;
return stream;
}
bool operator==(const Person &lhs, const string &rhs){
return lhs.name == rhs;
}
这是分段错误的样子:
Program received signal SIGSEGV, Segmentation fault.
0x00005555555565ae in operator<< (
stream=<error reading variable: Cannot access memory at address 0x7fffff7feff8>,
it=<error reading variable: Cannot access memory at address 0x7fffff7feff0>) at class.cpp:114
114 ostream& operator<<(ostream &stream, const Person &it){
(gdb)
做回溯:
#1 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#2 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#3 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#4 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#5 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#6 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#7 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#8 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#9 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#10 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#11 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#12 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#13 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#14 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#15 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#16 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#17 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#18 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
为什么会发生这种情况,我该如何解决? 是堆栈溢出吗?
编辑:在原始帖子中添加了 operator<< 重载以进行澄清。
您的操作员应该打印您的 Person 类的原始类型。 像这样:
ostream& operator<<(ostream &stream, const Person &it){
stream << "This is the name: " << it.name;
return stream;
}
如果你在你的函数中流 << it ,它会继续尝试在无限递归调用中打印 Person 。
哦,对不起,复制粘贴我有点错误。 这是我的 operator<< 重载:
ostream& operator<<(ostream &stream, const Person &it){
stream << it;
return stream;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.