why am i getting this runtime exception when using shared_ptr?
===

In the following code, I am getting the following runtime exception (possibly memory leak) after return 1; and in destructor of Node().

`Unhandled exception at 0x0f9bad4a (msvcp100d.dll) in test.exe: 0xC0000005: Access violation reading location 0xfeeefef2.`

It's been a while since I used smart_ptr, so am trying to learn what am I doing wrong here ?

    #include <vector>
    #include <queue>
    #include <memory>
    
    #include <iostream>
    using namespace std;
    
    class Node;
    typedef shared_ptr<Node> SharedNode;
    
    class Node {
    	Node* parent;
    	vector< SharedNode > children;
    	int value;
    
    	//limiting construction
    	Node(int a_value):value(a_value),parent(0){}
    	Node(const Node &copy); //non-construction-copyable
    	Node& operator=(const Node& copy); //non-copyable
    public:
    	static SharedNode create(int a_value){
    		return SharedNode(new Node(a_value));
    	}
    	SharedNode addChild(SharedNode child){
    		child->parent = this;
    		children.push_back(child);
    		return child;
    	}
    
    SharedNode getNode(int searchValue);
    };
    
    SharedNode Node::getNode(int searchValue){
    
    	// Breadth First Search
    	queue<SharedNode> que;
    	que.push(SharedNode(this));
    
    	while(!que.empty()){
    		SharedNode node = que.front();
    		que.pop();
    
    		if(node->value == searchValue)
    			return node;
    		
    		vector<SharedNode>::iterator it;
    		for(it = node->children.begin(); it != node->children.end(); it++){
    			que.push(*it);
    		}
    	}
    
    	return 0;
    }
    
    int main(){
    	SharedNode node_ptr = Node::create(5);
    
    	for(int i  = 0; i < 4; ++i)
    		node_ptr->addChild(Node::create(i));
    
    	cout << (node_ptr->getNode(-1) != 0 ? "Found" : "Not found");
    
    	return 1;
    }

I think I'm messing up when I use shared_ptr on this, like: `shared_ptr(this)`. But then, that's my guess. 

What am I doing wrong here ?