ошибка сегментации, ошибка возврата при поиске - PullRequest
0 голосов
/ 29 октября 2011

Я пытаюсь создать адресную книгу, пытаюсь выполнить поиск, но получаю ошибку сегментации.Я знаю, что это значит, но почему он пытается выделить используемую память?Почему он не ищет?

Вот код:

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]

Ответы [ 2 ]

1 голос
/ 29 октября 2011

Как указано в комментариях, вы должны научиться использовать отладчик для определения причины ошибки сегментации.

Мне кажется, что вы пытаетесь выполнить операции с несуществующими контактами. Я вижу массив нулевой длины в menu() и не вижу, как вы связали созданные вами контакты в main() с функцией menu() и, следовательно, с функцией поиска.

Если вы попытаетесь выполнить операции с неинициализированными объектами, вы увидите ошибку сегментации, подобную этой.

0 голосов
/ 29 октября 2011

Вы не можете выполнить сравнение строк, используя ==, что вы сделали, когда вы соответствовали, выбрав «поиск» и попытавшись найти подходящие имена. http://www.cplusplus.com/reference/clibrary/cstring/strcmp/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...