繁体   English   中英

在向量中搜索时出现分段错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM