Search function gives error in certain compilers?

Hello!

I'm currently struggling with this linked list program I'm making. I want it to search for an ID number and then display the name of the person whose ID number matches the one that is searched for. However, at the moment, while I finally got the program to display the people's names and IDs and properly search for an ID and output the name, if I try to run the program in PuTTy, I get a segmentation fault. In Visual Studio, it runs just fine. Is there a particular reason for this? Thanks!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
  #include <iostream>
#include <string>

using namespace std;

class node{
private:
  string name;
  int ID;
  node *next;
public:
  node();
  void set(string, int, node *ptr);
  void print();
  string search(int);
  void queue(string, int);
};

node::node(){
  next = NULL;
}

void node::print(){
  cout << name << " " << ID << endl;

  if(next != NULL){
    next->print();
  }
}

void node::set(string nameset, int IDset, node *ptr){
  name = nameset;
  ID = IDset;
  next = NULL;
}

void node::queue(string nameq, int IDq){
  if (next == NULL){
    next = new node;
    next->set(nameq, IDq, NULL);
  }
  else {
    next->queue(nameq, IDq);
  }
}

string node::search(int IDs){
  if (IDs == ID){
	  return name;
  }

  else
  {
	  return " ";
  }
}


int main(){
  int IDs;

  node * head = new node();
  head->set("Alice", 123, NULL);
  head->queue("Bob", 234);
  head->queue("Charlie", 678);
  head->queue("Dave", 789);
  head->queue("DudeMan", 1337);

  head->print();

  cout << "Please enter an ID to search for.\n\n";
  cin >> IDs;
  cout << "\n\n";

  cout << head->search(IDs);
}
Shouldn't your search function be more like
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string node::search(int IDs)
{
    if (ID != IDs && next!=nullptr)
    {
        return next->search(IDs);
    }
    else if (ID==IDs)
    {
        return name;
    }
    else
    {
        return "Not found";
    }
}


to actually produce results? PuTTy doesn't mean anything. What is the actual compiler on the other end (e.g. which version of g++ and how are you compiling it)

Btw, seems strange to see you trying to do it all in one class. I think it makes much more sense for Node to be a really simple class with just a value and maybe "next" and "prev" pointers, while all the work to be done in a NodeManager, which knows about head, tail, and how to clean things.
Last edited on
Topic archived. No new replies allowed.