title: Unhandled Exception: Access violation reading location
body: <p>Unhandled exception at 0x001AF3B5 in test.exe: 0xC0000005: Access violation reading location 0x00000000.</p>
  
  <p>getting an unhandled exception when i implement this code in my project <a href="http://sourcemaking.com/design_patterns/command/cpp/2" rel="nofollow">http://sourcemaking.com/design_patterns/command/cpp/2</a></p>
  
  <pre><code>#include &lt;iostream&gt;  
  #include &lt;string&gt;  
  using namespace std;
  class Person;
  
  class Command
  {
  // 1. Create a class that encapsulates an object and a member function
  // a pointer to a member function (the attribute's name is "method")
  Person *object; //    
  void(Person:: *method)();
    public:
      Command(Person *obj = 0, void(Person:: *meth)() = 0)
  {
      object = obj; // the argument's name is "meth"
      method = meth;
  }
  void execute()
  {
      (object-&gt; *method)(); // invoke the method on the object
  }
  };
  
  class Person
  {
  string name;
  
  // cmd is a "black box", it is a method invocation
  // promoted to "full object status"
  Command cmd; 
    public:
  Person(string n, Command c): cmd(c)
  {
      name = n;
  }
  void talk()
  {
      // "this" is the sender, cmd has the receiver
      cout &lt;&lt; name &lt;&lt; " is talking" &lt;&lt; endl;
      cmd.execute(); // ask the "black box" to callback the receiver
  }
  void passOn()
  {
      cout &lt;&lt; name &lt;&lt; " is passing on" &lt;&lt; endl;
  
      // 4. When the sender is ready to callback to the receiver,
      // it calls execute()
      cmd.execute(); 
  }
  void gossip()
  {
      cout &lt;&lt; name &lt;&lt; " is gossiping" &lt;&lt; endl;
      cmd.execute();
  }
  void listen()
  {
      cout &lt;&lt; name &lt;&lt; " is listening" &lt;&lt; endl;
  }
  };
  
  int main()
  {
    // Fred will "execute" Barney which will result in a call to passOn()
    // Barney will "execute" Betty which will result in a call to gossip()
    // Betty will "execute" Wilma which will result in a call to listen()
    Person wilma("Wilma", Command());
    // 2. Instantiate an object for each "callback"
    // 3. Pass each object to its future "sender"
    Person betty("Betty", Command(&amp;wilma, &amp;Person::listen));
    Person barney("Barney", Command(&amp;betty, &amp;Person::gossip));
    Person fred("Fred", Command(&amp;barney, &amp;Person::passOn));
    fred.talk();
  }
  </code></pre>
  
  <p>Not sure at all why? I implemented it as it no changes except the output is different and only 2 people instead of the 4. Tried a bit of debugging and its erroring at execute() in command.</p>
  
  <p>Any help or tips would be great!</p>
  
  <p>EDIT: Actually after some testing its when i change the people and the calls that it is happening not sure why.</p>
  
  <pre><code>    Person player("Player", Command());
      Person master("House Master", Command(&amp;player, &amp;Person::passOn));
      master.talk();
  </code></pre>