Pointers give seg fault : <p>here's the program</p>

<pre><code>    #include &lt;iostream&gt;
    #include &lt;time.h&gt;
    #include &lt;conio.h&gt;
    #include &lt;cstdlib&gt;
    #include &lt;windows.h&gt;

    using namespace std;

    const int widht = 117,height = 26;

    class Paddle
    {
    private:
        int y;
        int originalY;
    public:
        Paddle()
        {        
            y=height/2-2;
            originalY=y;
        }
        inline int getY()
        {
            return y;
        }
        inline void moveUp()
        {
            y--;
        }
        inline void moveDown()
        {
            y++;
        }
        void checkWall()
        {
            if (y&lt;0)
            {
                while (y&lt;0)
                {
                y++;
                }
            }
            else if (y&gt;height)
            {
                while (y&gt;height)
                {
                y--;
                }
            }
        }
        void Reset()
        {
        y=originalY;
        }
    };

    class Ball
    {
    private:
        int x,y;
        int originalX,originalY;
    public:
        Ball()
        {
            x=widht/2;
            y=height/2;
            originalX=x;
            originalY=y;
        }
        inline int getX()
        {
            return x;
        }
        inline int getY()
        {
            return y;
        }
        inline void moveRight()
       {
            x++;
       }
        inline void moveUpRight()
        {
            x++;
            y--;
        }
        inline void moveDownRight()
        {
            x++;
            y++;
        }
        inline void moveLeft()
        {
            x--;
        }
        inline void moveUpLeft()
        {
            y--;
            x--;
        }
        inline void moveDownLeft()
        {
            y++;
            x--;
        }
        inline void Reset()
        {
            x=originalX;
            y=originalY;
       }
    };

    class Manager
    {
    private:
        int score1,score2;
        int columns, rows;
    public:
        int p1y;
        int p2y;
        int ballX,ballY;
        bool gameOver;
        Manager()
        {
            gameOver = false;
        }
        void Draw(Paddle *p1,Paddle *p2,Ball *b)
        {  
            system("cls");
            p1y=p1-&gt;getY();
            p2y=p1-&gt;getY();
            ballX=b-&gt;getX();
            ballY=b-&gt;getY();
            for (int i=0;i&lt;height;i++)
            {
                for (int j=0;j&lt;widht;j++)
                {
                    if (i==p1y &amp;&amp; j==2)
                    {
                        cout &lt;&lt; "\xDB";
                    }
                    else if (i==p1y+1 &amp;&amp; j==2)
                    {
                        cout &lt;&lt; "\xDB";
                    }
                    else if (i==p1y+2 &amp;&amp; j==2)
                    {
                        cout &lt;&lt; "\xDB";
                    }
                    else if (i==p1y+3 &amp;&amp; j==2)
                    {
                        cout &lt;&lt; "\xDB";
                    }
                    else if (i==p1y+4 &amp;&amp; j==2)
                    {
                        cout &lt;&lt; "\xDB";
                    }
                    else if (i==p2y &amp;&amp; j==widht-1)
                    {
                        cout &lt;&lt; "\xDB";
                    }
                    else if (i==p2y+1 &amp;&amp; j==widht-1)
                    {
                        cout &lt;&lt; "\xDB";
                    }
                    else if (i==p2y+2 &amp;&amp; j==widht-1)
                    {
                        cout &lt;&lt; "\xDB";
                    }
                    else if (i==p2y+3 &amp;&amp; j==widht-1)
                    {
                        cout &lt;&lt; "\xDB";
                    }
                    else if (i==p2y+4 &amp;&amp; j==widht-1)
                    {
                        cout &lt;&lt; "\xDB";
                    }
                    else if (i==ballX &amp;&amp; j==ballY)
                    {
                        cout &lt;&lt; "O";
                    }
                    cout &lt;&lt; " ";
                }
                cout &lt;&lt; endl;
            }
            cout &lt;&lt; p1 -&gt; getY();
        }
        void Input(Paddle *p1,Paddle *p2)
        {
            if (_kbhit())
            {
                switch(_getch())
                {
                    case 'w':
                        p1-&gt;moveUp();
                        break;
                    case 's':
                        p1-&gt;moveDown();
                        break;
                    case 'i':
                        p2-&gt;moveUp();
                        break;
                    case 'k':
                        p2-&gt;moveDown();
                        break;
                }
            }
        }
        void Run(Paddle *p1,Paddle *p2, Ball *b)
        {
            while(!gameOver)
            {
                Draw(p1,p2,b);
                Input(p1,p2);
                Sleep(10);
            }
        }
    };

    int main()
    {
        Paddle *p1;
        Paddle *p2;
        Ball *b;
        Manager *m;
        m-&gt;Run(p1,p2,b);
        return 0;
    }
</code></pre>

<p>I can't understand why when i launch the program it give (with the debugger) segmentation fault.
I think cause are pointers, because before it worked perfectly(but without modifiyng values);
Hae any tips?</p>
