C++ 分段错误,搜索返回错误
我试图设计一个地址簿,尝试进行搜索,但我不断得到一个分段错误。我知道这意味着什么,但为什么它要分配正在使用的内存呢?为什么它不搜索 代码如下:C++ 分段错误,搜索返回错误,c++,visual-c++,C++,Visual C++,我试图设计一个地址簿,尝试进行搜索,但我不断得到一个分段错误。我知道这意味着什么,但为什么它要分配正在使用的内存呢?为什么它不搜索 代码如下: class contact{ private: string fn="", ln="", email="", number=""; public: void input(); void output(); void setfname(string f_n); void setlname(string l_n)
class contact{
private:
string fn="", ln="", email="", number="";
public:
void input();
void output();
void setfname(string f_n);
void setlname(string l_n);
void setemail(string emaila);
void setnumber(string num);
string getfname();
string getlname();
string getemail();
string getnumber();
contact();
contact(string f_n, string l_n, string emaila,string num);
};
void menu(string opt);
int search_contacts( contact contacts[],int MAX, string search);
int main(){
string search;
const int MAX=2;
contact contacts[MAX];
cout << "Enter up to " << MAX << " contacts.\n";
for (int i = 1; i <= MAX; i++)
{
contacts[0].input();
}
[menu function goes here]
contacts[0].output();
return 0;
}
int search_contacts(contact contacts[],int size, string search)
{
cout << "Search contact by LastName:____ ";
cin >> search;
bool lookup = false;
for(int index=0;index<size;index++)
{
if(contacts[index].getlname() == search)
{
lookup = true;
cout<<"Result found "<<endl;
break;
}
}
if(!lookup)
cout<<"no record found"<<endl;
}
void menu(string opt){
string search;
contact contacts[0];
const int MAX = 2;
[show menu msg...here]
cin>>opt;
// do this if the option selected is search
if(opt=="search")
{
search_contacts(contacts, MAX, search);
}
[more menu code]
}
void contact::input()
{
cout<<"fn and ln separate by a space: ";
cin>>fn>>ln;
cout<<"email: ";
cin>>email;
cout<<"phone number: ";
cin>>number;
}
void contact::output()
{
[output code... goes here];
}
string contact::getlname()
{
return ln;
}
[functions that delegates the variables...goes here]
class联系人{
私人:
字符串fn=“”,ln=“”,email=“”,number=“”;
公众:
无效输入();
无效输出();
void setfname(字符串f_n);
void setlname(字符串l_n);
void setemail(字符串emaila);
无效集合编号(字符串编号);
字符串getfname();
字符串getlname();
字符串getemail();
字符串getnumber();
接触();
联系人(字符串f_n、字符串l_n、字符串emaila、字符串num);
};
无效菜单(字符串选项);
int search_contacts(contact contacts[],int MAX,字符串搜索);
int main(){
字符串搜索;
常数int MAX=2;
接触触点[MAX];
cout当您将opt匹配到“search”并尝试查找匹配的名称时,无法使用==进行字符串比较。
如评论中所述,您应该学习如何使用调试器来确定出现分段错误的原因
在我看来,您正在尝试对不存在的联系人执行操作。我在menu()
中看到了一个零长度数组,我看不出您是如何将在main()
中创建的联系人添加到menu()
函数,从而添加到搜索函数的
如果您尝试对未初始化的对象执行操作,您将看到类似这样的分段错误。您是否通过调试器运行此操作以找到问题所在?另请参见:是的,这是我看到的另一个明显问题。指向搜索字符串的指针将使用=
进行比较。它永远不会等于指针I在联系人列表中。我没有看到帖子中的strcmp
功能。“当前帖子”使用std::string
,这允许操作符==()
@Thomas,谢谢,我想你是对的。(我更喜欢C语言,所以我忽略了string
)这会使这个答案不正确。对于记录,使用<代码>=< /Cord>是C或java中的一个明显错误。C++或C语言中,我认为它很好。(虽然在C语言中它使我畏缩,来自java背景!)事实上,这很可能就是问题所在。您为搜索函数提供了一个大小为零的数组,但将size参数设置为2。这不起作用。还有一个提示:使用向量而不是数组,它们更容易处理!