Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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++ 分段错误,搜索返回错误_C++_Visual C++ - Fatal编程技术网

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。这不起作用。还有一个提示:使用向量而不是数组,它们更容易处理!